Sqler
یک سازنده کوئری SQL قدرتمند و انعطافپذیر برای Dart، با تمرکز بر پشتیبانی از MySQL و SQLite3 با طراحی رابط روان.
ویژگیها
- رابط روان: ساخت کوئریهای SQL با استفاده از زنجیرهسازی متدها برای خوانایی بهتر
- نوع-ایمن: ساخت کوئریها با امنیت در زمان کامپایل
- پشتیبانی جامع: عملیات SELECT، INSERT، UPDATE، DELETE
- بندهای پیشرفته: WHERE، JOIN، GROUP BY، HAVING، ORDER BY، LIMIT
- کوئریهای پارامتری: پشتیبانی از پارامترهای نامدار برای جلوگیری از SQL injection
- Escaping مناسب: نقلقول خودکار فیلدها و escape کردن مقادیر
- عملیات پیچیده: زیرکوئریها، دستورات CASE، توابع تجمیعی
- بهینهشده برای MySQL: طراحیشده بهطور خاص برای سینتکس و ویژگیهای MySQL
- بهینهشده برای SQLite: طراحیشده بهطور خاص برای سینتکس و ویژگیهای SQLite
نصب
این را به فایل pubspec.yaml پکیج خود اضافه کنید:
dependencies:
sqler:
یا
dart pub add sqler
سپس اجرا کنید:
dart pub get
شروع سریع
import 'package:sqler/sqler.dart';
void main() {
// ساخت جدول
var books = MTable(
name: 'books',
fields: [
MFieldInt(name: 'id', isPrimaryKey: true, isAutoIncrement: true),
MFieldVarchar(name: 'name', length: 255),
MFieldVarchar(name: 'author', length: 255),
MFieldInt(name: 'publication_year'),
MFieldDate(name: 'published_date'),
MFieldText(name: 'content'),
],
);
// کوئری SELECT ساده
var query = Sqler()
.addSelect(QSelect('name'))
.addSelect(QSelect('published_date'))
.from(QField('books'))
.where(WhereOne(QField('publication_year'), QO.EQ, QVar(1980)))
.orderBy(QOrder('name'))
.limit(10);
print(query.toSQL());
/// چاپ برای SQLite:
print(query.toSQL<Sqlite>());
}
SQLite
برای تولید کوئری SQL بهطور خاص در فرمت SQLite، Sqlite را بهعنوان پارامتر نوع به تابع toSQL ارسال کنید:
query.toSQL<Sqlite>()
این تضمین میکند که سینتکس SQL تولید شده با SQLite سازگار است.
کلاسهای اصلی
Sqler
کلاس اصلی سازنده کوئری که یک رابط روان برای ساخت کوئریهای SQL ارائه میدهد.
QField
نمایانگر فیلدهای پایگاه داده با نقلقول مناسب:
QField('users.name') // users.`name`
QField('table_name') // `table_name`
QVar
نمایانگر مقادیر با escape مناسب:
QVar('string value') // 'string value'
QVar(123) // 123
QVar(true) // true
QVar(null) // NULL
QSelect
نمایانگر فیلدهای SELECT با نام مستعار اختیاری:
QSelect('name') // `name`
QSelect('users.name', 'user_name') // users.`name` AS `user_name`
مثالهای استفاده
کوئری SELECT پایه
var query = Sqler()
.addSelect(QSelect('id'))
.addSelect(QSelect('name'))
.addSelect(QSelect('email'))
.from(QField('users'));
print(query.toSQL());
// SELECT `id`, `name`, `email` FROM `users`
SELECT با شرایط WHERE
var query = Sqler()
.addSelect(QSelect('*'))
.from(QField('users'))
.where(AndWhere([
WhereOne(QField('active'), QO.EQ, QVar(true)),
WhereOne(QField('age'), QO.GT, QVar(18))
]));
print(query.toSQL());
// SELECT * FROM `users` WHERE ( ( `active` = true ) ) AND ( ( `age` > 18 ) )
SELECT با JOINها
var query = Sqler()
.addSelect(QSelect('users.name'))
.addSelect(QSelect('profiles.bio'))
.from(QField('users'))
.join(LeftJoin('profiles', On([
Condition(QField('users.id'), QO.EQ, QField('profiles.user_id'))
])))
.where(WhereOne(QField('users.active'), QO.EQ, QVar(true)));
print(query.toSQL());
// SELECT `users`.`name`, `profiles`.`bio` FROM `users`
// LEFT JOIN `profiles` ON ( ( `users`.`id` = `profiles`.`user_id` ) )
// WHERE ( `users`.`active` = true )
عملیات INSERT
// درج یک رکورد
var query = Sqler()
.insert(QField('users'), [
{
'name': QVar('John Doe'),
'email': QVar('[email protected]'),
'active': QVar(true),
'age': QVar(30)
}
]);
print(query.toSQL());
// INSERT INTO `users` (`name`, `email`, `active`, `age`)
// VALUES ('John Doe', '[email protected]', true, 30)
// درج چندین رکورد
var query = Sqler()
.insert(QField('users'), [
{
'name': QVar('John Doe'),
'email': QVar('[email protected]')
},
{
'name': QVar('Jane Smith'),
'email': QVar('[email protected]')
}
]);
print(query.toSQL());
// INSERT INTO `users` (`name`, `email`)
// VALUES ('John Doe', '[email protected]'), ('Jane Smith', '[email protected]')
عملیات UPDATE
var query = Sqler()
.update(QField('users'), {
'name': QVar('Updated Name'),
'email': QVar('[email protected]')
})
.where(WhereOne(QField('id'), QO.EQ, QVar(1)));
print(query.toSQL());
// UPDATE `users` SET `name` = 'Updated Name', `email` = '[email protected]'
// WHERE ( `id` = 1 )
عملیات DELETE
var query = Sqler()
.delete()
.from(QField('users'))
.where(WhereOne(QField('active'), QO.EQ, QVar(false)));
print(query.toSQL());
// DELETE FROM `users` WHERE ( `active` = false )
کوئریهای پیچیده با GROUP BY و HAVING
var query = Sqler()
.addSelect(QSelect('department'))
.addSelect(QSelectFunc('COUNT', [QField('id')], 'employee_count'))
.from(QField('employees'))
.where(WhereOne(QField('active'), QO.EQ, QVar(true)))
.groupBy(QField('department'))
.having(HavingOne(QSelectFunc('COUNT', [QField('id')]), QO.GT, QVar(5)))
.orderBy(QOrder('employee_count', OrderDirection.DESC));
print(query.toSQL());
// SELECT `department`, COUNT(`id`) AS `employee_count` FROM `employees`
// WHERE ( `active` = true ) GROUP BY `department`
// HAVING ( COUNT(`id`) > 5 ) ORDER BY `employee_count` DESC
کوئریهای پارامتری
var query = Sqler()
.addSelect(QSelect('*'))
.from(QField('users'))
.where(WhereOne(QField('name'), QO.EQ, QParam('user_name')))
.param('user_name', QVar('John Doe'));
print(query.toSQL());
// SELECT * FROM `users` WHERE ( `name` = :user_name )
var params = query.getParams();
// {'user_name': QVar('John Doe')}
عملگرها
کلاس QO عملگرهای مقایسهای مختلفی ارائه میدهد:
QO.EQ- مساوی (=)QO.NE- نامساوی (!=)QO.GT- بزرگتر از (>)QO.GTE- بزرگتر یا مساوی (>=)QO.LT- کوچکتر از (<)QO.LTE- کوچکتر یا مساوی (<=)QO.LIKE- تطابق الگوی LIKEQO.NOT_LIKE- تطابق الگوی NOT LIKEQO.IN- لیست INQO.NOT_IN- لیست NOT INQO.IS_NULL- IS NULLQO.IS_NOT_NULL- IS NOT NULL
شرایط WHERE
شرایط پایه
WhereOne(QField('status'), QO.EQ, QVar('active'))
شرایط ترکیبی
AndWhere([
WhereOne(QField('active'), QO.EQ, QVar(true)),
WhereOne(QField('age'), QO.GTE, QVar(18))
])
OrWhere([
WhereOne(QField('role'), QO.EQ, QVar('admin')),
WhereOne(QField('role'), QO.EQ, QVar('moderator'))
])
انواع JOIN
InnerJoin- INNER JOINLeftJoin- LEFT JOINRightJoin- RIGHT JOIN
.join(InnerJoin('table2', On([
Condition(QField('table1.id'), QO.EQ, QField('table2.table1_id'))
])))
🚀 نسخه بتا - مشارکت شما مهم است!
Sqler در حال حاضر در مرحله بتا است! ما هیجانزده هستیم که این سازنده کوئری SQL قدرتمند را با جامعه Dart به اشتراک بگذاریم، و دوست داریم کمک شما را برای بهتر کردن آن دریافت کنیم.
چگونه میتوانید کمک کنید
این نسخه بتا به این معناست که ما بهطور فعال به دنبال بازخورد و مشارکت توسعهدهندگانی مانند شما هستیم! در اینجا چند راه برای مشارکت وجود دارد:
- 🐛 گزارش باگ: چیزی یافتید که طبق انتظار کار نمیکند؟ لطفاً یک issue باز کنید!
- 📝 مستندات: به ما کمک کنید مستندات، مثالها و راهنماها را بهبود دهیم
- 💡 درخواست ویژگی: ایدههایی برای ویژگیهای جدید دارید؟ دوست داریم آنها را بشنویم!
- 🔧 مشارکت در کد: Pull Request ارسال کنید تا به بهبود کدبیس کمک کنید
- 🧪 تست: از Sqler در پروژههای خود استفاده کنید و تجربه خود را به اشتراک بگذارید
حمایت خود را نشان دهید
از آنجایی که ما از ستارهها و امتیازها بهعنوان معیار اصلی برای سنجش علاقه جامعه و راهنمایی اولویتهای توسعه خود استفاده میکنیم، واقعاً قدردان خواهیم بود اگر:
- ⭐ به ما در GitHub ستاره بدهید: به دیگران کمک کنید Sqler را کشف کنند!
- 👍 این پکیج را لایک کنید: حمایت شما به ما انگیزه میدهد که به بهبود ادامه دهیم
- 📢 با دیگران به اشتراک بگذارید: به توسعهدهندگان دیگر درباره Sqler بگویید
بازخورد و مشارکت شما در کمک به ما برای ساخت بهترین سازنده کوئری SQL برای Dart بسیار ارزشمند است. از اینکه بخشی از سفر ما هستید، متشکریم! 🙏
مشارکت
مشارکتها خوشآمدید هستند! لطفاً با خیال راحت یک Pull Request ارسال کنید. برای تغییرات عمده، لطفاً ابتدا یک issue باز کنید تا درباره آنچه میخواهید تغییر دهید، بحث کنیم.
مجوز
این پروژه تحت مجوز MIT منتشر شده است - برای جزئیات فایل LICENSE را ببینید.