کتابخانه‌ی استاندارد · پایگاه داده

دیتابیس db

رابط مشترک پایگاه‌های داده، مهاجرت ساختار و استخر اتصال.

واردسازی دیتابیس

هر موتور پایگاه داده بسته‌ی خودش را دارد: اس کیو لایت، مای اس کیو ال، پستگرس و برای کلید و مقدار ردیس. این بسته رابط اتصال را می‌دهد که سه موتور SQL پیاده‌اش می‌کنند؛ اگر کدتان را با آن بنویسید، عوض کردن موتور فقط یک خط است.

مهاجرت‌ها ساختار پایگاه داده را همراه کد پیش می‌برند: هر تغییر یک شماره دارد و مهاجرت به بالا فقط آن‌هایی را اعمال می‌کند که هنوز اعمال نشده‌اند. مقدارهایی را که کاربر وارد کرده هرگز مستقیم در SQL نچسبانید؛ آن‌ها را با نقل قول یا پارامترهای آماده‌سازی‌شده بفرستید.

گونه‌ها

استخر Pool

ساختار استخر
استخر اتصال‌ها برای برنامه‌هایی که هم‌زمان چند اتصال لازم دارند.
نامانگلیسیگونهتوضیح
connsconnsوکتوراتصال‌ها.
takentakenوکتور<صحیح>کدام اتصال گرفته شده.
limitlimitصحیح = 0بیشترین شمار اتصال.
db-Pool.salam
واردسازی دیتابیس
واردسازی دیتابیس.اس کیو لایت

روال ریشه:
    ناپایا استخر := دیتابیس.استخر جدید(۲)
    تکرار ۳:
        سرچاپ دیتابیس.افزودن(استخر، اس کیو لایت.اتصال(اس کیو لایت.بازکردن(":memory:")))
    پایان
    سرچاپ دیتابیس.اندازه(استخر)، دیتابیس.بیکار(استخر)، دیتابیس.در استفاده(استخر)

    یک := دیتابیس.گرفتن(استخر)
    دو := دیتابیس.گرفتن(استخر)
    سه := دیتابیس.گرفتن(استخر)
    سرچاپ دیتابیس.اجاره شده(یک)، دیتابیس.اجاره شده(سه)، سه == دیتابیس.بدون اجاره
    سرچاپ دیتابیس.بیکار(استخر)، دیتابیس.در استفاده(استخر)

    ا := دیتابیس.اتصال اجاره‌ای(استخر، یک)
    سرچاپ دیتابیس.پرسمان عدد(ا، "SELECT 6 * 7")
    دیتابیس.رهاکردن(استخر، یک)
    دیتابیس.رهاکردن(استخر، دو)
    سرچاپ دیتابیس.بیکار(استخر)، دیتابیس.حذف مرده ها(استخر)
    دیتابیس.بستن همه(استخر)
    دیتابیس.آزادکردن(استخر)
پایان
خروجیtrue true false 2 2 0 true false true 0 2 42 2 0

ردیف ها Rows

میانجی ردیف ها
رابط ردیف‌های یک پرسمان؛ متدهایش: بعدی، متن، عدد صحیح، بستن و مانند آن.
db-Connection.salam
واردسازی دیتابیس
واردسازی دیتابیس.اس کیو لایت

روال گزارش(ا: dyn دیتابیس.اتصال):
    سرچاپ ا.نوع()، ا.معتبر()، ا.پینگ()
    _ := ا.اجرا("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, score REAL)")
    _ := ا.اجرا("INSERT INTO users (name, score) VALUES (" + ا.نقل قول("O'Brien") + ", 7.5)")
    _ := ا.اجرا("INSERT INTO users (name, score) VALUES ('مریم', 9)")
    سرچاپ ا.شناسه آخرین درج()، ا.تعداد تغییرات()

    ر := ا.پرسمان("SELECT id, name, score FROM users ORDER BY id")
    سرچاپ ر.معتبر()، ر.تعداد ستون()، ر.نام ستون(۱)
    تا ر.بعدی():
        سرچاپ ر.عدد صحیح(۰)، ر.متن(۱)، ر.عدد اعشار(۲)، ر.عدد صحیح۶۴(۰)، ر.خالی است(۲)، ر.نوع ستون(۱)
    پایان
    _ := ر.بستن()

    ت := ا.شروع تراکنش()
    سرچاپ ت.معتبر()
    _ := ت.اجرا("UPDATE users SET score = 0")
    ت‌ر := ت.پرسمان("SELECT SUM(score) FROM users")
    _ := ت‌ر.بعدی()
    سرچاپ ت‌ر.عدد اعشار(۰)
    _ := ت‌ر.بستن()
    _ := ت.بازگردانی()
    ت۲ := ا.شروع تراکنش()
    _ := ت۲.اجرا("DELETE FROM users WHERE id = 1")
    _ := ت۲.ثبت تراکنش()

    سرچاپ دیتابیس.پرسمان عدد(ا، "SELECT COUNT(*) FROM users")، دیتابیس.پرسمان عدد۶۴(ا، "SELECT MAX(id) FROM users")
    سرچاپ دیتابیس.پرسمان اعشار(ا، "SELECT score FROM users")، دیتابیس.پرسمان متن(ا، "SELECT name FROM users")
    سرچاپ دیتابیس.شمارش ردیف ها(ا، "SELECT * FROM users")
    سرچاپ دیتابیس.اجرا کن(ا، "INSERT INTO users (name) VALUES ('علی')")، دیتابیس.اجرا کن(ا، "INSERT INTO nowhere VALUES (1)")
    سرچاپ ا.خطا()
    ناپایا دستورها := وکتور {} برگردان وکتور<رشته>
    دستورها.افزودن("INSERT INTO users (name) VALUES ('سارا')")
    دستورها.افزودن("INSERT INTO users (name) VALUES ('رضا')")
    سرچاپ دیتابیس.اجرای همه(ا، دستورها)
    دستورها.افزودن("INSERT INTO nowhere VALUES (1)")
    سرچاپ دیتابیس.در تراکنش(ا، دستورها)، دیتابیس.پرسمان عدد(ا، "SELECT COUNT(*) FROM users")
    سرچاپ دیتابیس.نقل قول("it's")
    _ := ا.بستن()
پایان

روال ریشه:
    گزارش(اس کیو لایت.اتصال(اس کیو لایت.بازکردن(":memory:")))
    سرچاپ دیتابیس.اس کیو لایت، دیتابیس.مای اس کیو ال، دیتابیس.پستگرس
    سرچاپ دیتابیس.نوع خالی، دیتابیس.نوع صحیح، دیتابیس.نوع اعشاری، دیتابیس.نوع متن، دیتابیس.نوع دودویی
پایان
خروجیsqlite true true 2 1 true 3 name 1 O'Brien 7.5 1 false 3 2 مریم 9 2 false 3 true 0 1 2 9 مریم 1 true false no such table: nowhere 2 false 4 'it''s' sqlite mysql postgres 0 1 2 3 4

تراکنش Tx

میانجی تراکنش
رابط تراکنش؛ متدهایش: اجرا، پرسمان، ثبت تراکنش و بازگردانی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

اتصال Connection

میانجی اتصال
رابط مشترک همه‌ی موتورها. کدی که با آن نوشته شود بدون تغییر روی SQLite، MySQL و PostgreSQL کار می‌کند؛ آن را با اتصال هر موتور بگیرید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

مهاجرت Migration

ساختار مهاجرت
یک مهاجرت: یک تغییر شماره‌دار در ساختار پایگاه داده.
نامانگلیسیگونهتوضیح
versionversionصحیح = 0شماره‌ی نسخه؛ مهاجرت‌ها به ترتیب همین شماره اعمال می‌شوند.
namenameرشته = ""نام.
upupرشته = ""SQL اعمال؛ چند دستور را با ; جدا کنید.
downdownرشته = ""SQL برگرداندن.
db-Migrate.salam
واردسازی دیتابیس
واردسازی دیتابیس.اس کیو لایت

روال ریشه:
    ا := اس کیو لایت.اتصال(اس کیو لایت.بازکردن(":memory:"))
    ناپایا م := دیتابیس.مهاجرت گر جدید()
    دیتابیس.افزودن مهاجرت(م، ۱، "users"، "CREATE TABLE users (id INTEGER PRIMARY KEY, email TEXT NOT NULL)"، "DROP TABLE users")
    دیتابیس.افزودن مهاجرت(م، ۲، "posts"، "CREATE TABLE posts (id INTEGER PRIMARY KEY, title TEXT); INSERT INTO posts (title) VALUES ('سلام')"، "DROP TABLE posts")
    دیتابیس.افزودن مهاجرت(م، ۳، "tags"، "ALTER TABLE posts ADD COLUMN tag TEXT"، "ALTER TABLE posts DROP COLUMN tag")
    سرچاپ دیتابیس.تعداد مهاجرت(م)، دیتابیس.نسخه طرح‌واره(م، ا)، دیتابیس.تعداد در انتظار(م، ا)

    سرچاپ دیتابیس.مهاجرت به(م، ا، ۲)
    سرچاپ دیتابیس.نسخه طرح‌واره(م، ا)، دیتابیس.اعمال شده(م، ا، ۲)، دیتابیس.اعمال شده(م، ا، ۳)
    سرچاپ دیتابیس.مهاجرت به بالا(م، ا)، دیتابیس.نسخه طرح‌واره(م، ا)
    سرچاپ دیتابیس.مهاجرت به بالا(م، ا)
    سرچاپ دیتابیس.بازگردانی(م، ا)، دیتابیس.نسخه طرح‌واره(م، ا)
    سرچاپ دیتابیس.مهاجرت به(م، ا، ۰)، دیتابیس.نسخه طرح‌واره(م، ا)
    سرچاپ دیتابیس.پرسمان عدد(ا، "SELECT COUNT(*) FROM " + دیتابیس.جدول مهاجرت)
    دیتابیس.آزادکردن مهاجرت گر(م)

    ناپایا م۲ := دیتابیس.مهاجرت گر در("app_versions")
    دیتابیس.افزودن مهاجرت(م۲، ۱، "t"، "CREATE TABLE t (x INTEGER)"، "DROP TABLE t")
    سرچاپ دیتابیس.ساخت جدول(م۲، ا)، دیتابیس.مهاجرت به بالا(م۲، ا)، م۲.table
    دیتابیس.آزادکردن مهاجرت گر(م۲)

    تکه‌ها := دیتابیس.جداکردن دستورها("INSERT INTO t VALUES (1); SELECT ';' ; ")
    سرچاپ تکه‌ها.طول()، تکه‌ها.دریافت(۱)
پایان
خروجی3 0 3 2 2 true false 1 3 0 true 2 2 0 0 0 1 app_versions 2 SELECT ';'

مهاجرت گر Migrator

ساختار مهاجرت گر
مجموعه‌ی مهاجرت‌ها.
نامانگلیسیگونهتوضیح
itemsitemsوکتور<مهاجرت>مهاجرت‌ها.
tabletableرشته = ""نام جدول نسخه‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

پایاها و متغیرها

بدون اجاره NO_LEASE

پایا بدون اجاره: صحیح۳۲ = -1
شماره‌ای که گرفتن وقتی اتصال آزادی نیست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

اس کیو لایت SQLITE

پایا اس کیو لایت: رشته = "sqlite"
نام موتور SQLite.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

مای اس کیو ال MYSQL

پایا مای اس کیو ال: رشته = "mysql"
نام موتور MySQL.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

پستگرس POSTGRES

پایا پستگرس: رشته = "postgres"
نام موتور PostgreSQL.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

نوع خالی TYPE_NULL

پایا نوع خالی: صحیح۳۲ = 0
گونه‌ی ستون: تهی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

نوع صحیح TYPE_INT

پایا نوع صحیح: صحیح۳۲ = 1
گونه‌ی ستون: عدد صحیح.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

نوع اعشاری TYPE_FLOAT

پایا نوع اعشاری: صحیح۳۲ = 2
گونه‌ی ستون: اعشاری.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

نوع متن TYPE_TEXT

پایا نوع متن: صحیح۳۲ = 3
گونه‌ی ستون: متن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

نوع دودویی TYPE_BLOB

پایا نوع دودویی: صحیح۳۲ = 4
گونه‌ی ستون: دودویی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

جدول مهاجرت MIGRATION_TABLE

پایا جدول مهاجرت: رشته = "schema_migrations"
نام پیش‌فرض جدولی که نسخه‌های اعمال‌شده در آن ثبت می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

روال‌ها

استخر جدید NewPool

روال استخر جدید(limit: صحیح): استخر
استخر خالی با بیشترین شمار اتصال.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

افزودن Add

روال افزودن(p &: استخر، c: dyn اتصال): منطقی
اتصالی به استخر می‌افزاید؛ اگر استخر پر باشد، نادرست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

گرفتن Acquire

روال گرفتن(p &: استخر): صحیح
یک اتصال آزاد را می‌گیرد و شماره‌ی اجاره را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

اجاره شده Leased

روال اجاره شده(lease: صحیح): منطقی
این شماره‌ی اجاره معتبر است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

اتصال اجاره‌ای Conn

روال اتصال اجاره‌ای(p: استخر، lease: صحیح): dyn اتصال
اتصال یک اجاره.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

رهاکردن Release

روال رهاکردن(p &: استخر، lease: صحیح)
اتصال را به استخر برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

اندازه Size

روال اندازه(p: استخر): صحیح
شمار اتصال‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

بیکار Idle

روال بیکار(p: استخر): صحیح
شمار اتصال‌های آزاد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

در استفاده InUse

روال در استفاده(p: استخر): صحیح
شمار اتصال‌های گرفته‌شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

حذف مرده ها DropDead

روال حذف مرده ها(p &: استخر): صحیح
اتصال‌های آزادی را که دیگر پاسخ نمی‌دهند می‌بندد و برمی‌دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

بستن همه CloseAll

روال بستن همه(p &: استخر)
همه‌ی اتصال‌ها را می‌بندد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Pool.salam

آزادکردن Free

روال آزادکردن(p &: استخر)
حافظه‌ی استخر را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

پرسمان عدد QueryInt

روال پرسمان عدد(c: dyn اتصال، sql: رشته): صحیح
نخستین ستون نخستین ردیف به شکل عدد؛ برای COUNT و مانند آن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

پرسمان عدد۶۴ QueryInt64

روال پرسمان عدد۶۴(c: dyn اتصال، sql: رشته): صحیح۶۴
مثل روال بالا، ۶۴ بیتی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

پرسمان اعشار QueryFloat

روال پرسمان اعشار(c: dyn اتصال، sql: رشته): اعشار۶۴
مثل روال بالا، اعشاری.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

پرسمان متن QueryText

روال پرسمان متن(c: dyn اتصال، sql: رشته): رشته
مثل روال بالا، متن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

شمارش ردیف ها CountRows

روال شمارش ردیف ها(c: dyn اتصال، sql: رشته): صحیح
شمار ردیف‌های نتیجه‌ی پرسمان.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

اجرا کن Run

روال اجرا کن(c: dyn اتصال، sql: رشته): منطقی
دستوری را اجرا می‌کند؛ اگر موفق بود، درست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

اجرای همه RunAll

روال اجرای همه(c: dyn اتصال، stmts: وکتور<رشته>): صحیح
دستورها را به ترتیب اجرا می‌کند و شمار موفق‌ها را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

در تراکنش InTx

روال در تراکنش(c: dyn اتصال، stmts: وکتور<رشته>): منطقی
همه‌ی دستورها را در یک تراکنش اجرا می‌کند؛ اگر یکی شکست بخورد، هیچ‌کدام اعمال نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

نقل قول QuoteLiteral

روال نقل قول(s: رشته): رشته
رشته را به شکل مقدار SQL با نقل‌قول و گریز ' برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

مهاجرت گر جدید NewMigrator

روال مهاجرت گر جدید(): مهاجرت گر
مهاجرت‌گر با جدول پیش‌فرض.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

مهاجرت گر در NewMigratorIn

روال مهاجرت گر در(table: رشته): مهاجرت گر
مهاجرت‌گر با جدول نسخه‌ی دیگر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

آزادکردن مهاجرت گر FreeMigrator

روال آزادکردن مهاجرت گر(m &: مهاجرت گر)
حافظه را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

افزودن مهاجرت AddMigration

روال افزودن مهاجرت(m &: مهاجرت گر، version: صحیح، name: رشته، up: رشته، down: رشته)
مهاجرتی با شماره، نام و SQL اعمال و برگرداندن می‌افزاید؛ ترتیب افزودن مهم نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

تعداد مهاجرت MigrationCount

روال تعداد مهاجرت(m: مهاجرت گر): صحیح
شمار مهاجرت‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

جداکردن دستورها SplitStatements

روال جداکردن دستورها(sql: رشته): وکتور<رشته>
متن SQL را به دستورها جدا می‌کند؛ ; درون رشته‌ها جداکننده نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

ساخت جدول EnsureTable

روال ساخت جدول(m: مهاجرت گر، c: dyn اتصال): صحیح
جدول نسخه‌ها را اگر نباشد می‌سازد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

نسخه طرح‌واره SchemaVersion

روال نسخه طرح‌واره(m: مهاجرت گر، c: dyn اتصال): صحیح
بالاترین نسخه‌ی اعمال‌شده؛ اگر هیچ، صفر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

اعمال شده IsApplied

روال اعمال شده(m: مهاجرت گر، c: dyn اتصال، version: صحیح): منطقی
این نسخه اعمال شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

تعداد در انتظار PendingCount

روال تعداد در انتظار(m: مهاجرت گر، c: dyn اتصال): صحیح
شمار مهاجرت‌های اعمال‌نشده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

مهاجرت به بالا MigrateUp

روال مهاجرت به بالا(m: مهاجرت گر، c: dyn اتصال): صحیح
همه‌ی مهاجرت‌های اعمال‌نشده را به ترتیب اعمال می‌کند و شمارشان را برمی‌گرداند؛ هر مهاجرت در یک تراکنش.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam

بازگردانی Rollback

روال بازگردانی(m: مهاجرت گر، c: dyn اتصال): منطقی
آخرین مهاجرت را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Connection.salam

مهاجرت به MigrateTo

روال مهاجرت به(m: مهاجرت گر، c: dyn اتصال، target: صحیح): صحیح
بالا یا پایین می‌رود تا نسخه به عدد داده‌شده برسد و شمار گام‌ها را برمی‌گرداند؛ صفر یعنی همه برگردند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-Migrate.salam