c55d3080cf
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
Documentation updates: - Fix v0.1.0 → v1.1.0 version numbers in en, ru, fa, zh docs - Add missing Window Functions, Multi-Tenant ERP, Supported Keywords sections to ru, fa, zh baraql.md (~105 lines each) - Expand Turkish and Arabic baraql.md (110 → 268 lines) - Expand Turkish and Arabic installation.md (62 → 307 lines) - Add new Bulgarian documentation files (18 new files) Client updates: - Python: Full async/await rewrite with asyncio, request queueing - Rust: Full async/await rewrite with tokio, async examples - Nim: Update README to v1.1.0 - All clients now support async patterns consistently
268 lines
7.3 KiB
Markdown
268 lines
7.3 KiB
Markdown
# مرجع لغة استعلام BaraQL
|
|
|
|
BaraQL هي لغة استعلام متوافقة مع SQL مع امتدادات لعمليات الرسم البياني والمتجة والمستندات.
|
|
|
|
## أنواع البيانات
|
|
|
|
| النوع | الوصف | مثال |
|
|
|-------|-------|------|
|
|
| `null` | قيمة فارغة | `null` |
|
|
| `bool` | منطقي | `true`, `false` |
|
|
| `int8` | عدد صحيح 8 بت | `127` |
|
|
| `int16` | عدد صحيح 16 بت | `32767` |
|
|
| `int32` | عدد صحيح 32 بت | `2147483647` |
|
|
| `int64` | عدد صحيح 64 بت | `9223372036854775807` |
|
|
| `float32` | فاصلة عائمة 32 بت | `3.14` |
|
|
| `float64` | فاصلة عائمة 64 بت | `3.14159265359` |
|
|
| `str` | سلسلة UTF-8 | `'hello'` |
|
|
| `vector` | متجه float32 | `[0.1, 0.2, 0.3]` |
|
|
| `datetime` | طابع زمني ISO 8601 | `'2025-01-15T10:30:00Z'` |
|
|
| `uuid` | UUID v4 | `'550e8400-e29b-41d4-a716-446655440000'` |
|
|
|
|
## الاستعلامات الأساسية
|
|
|
|
### SELECT
|
|
|
|
```sql
|
|
SELECT * FROM users;
|
|
SELECT name, age FROM users;
|
|
SELECT name AS full_name FROM users;
|
|
SELECT * FROM users LIMIT 10 OFFSET 20;
|
|
```
|
|
|
|
### WHERE
|
|
|
|
```sql
|
|
SELECT * FROM users WHERE age > 18;
|
|
SELECT * FROM users WHERE age BETWEEN 18 AND 65;
|
|
SELECT * FROM users WHERE department IN ('Engineering', 'Sales');
|
|
SELECT * FROM users WHERE name LIKE 'A%';
|
|
```
|
|
|
|
### INSERT
|
|
|
|
```sql
|
|
INSERT users { name := 'Alice', age := 30 };
|
|
```
|
|
|
|
### UPDATE
|
|
|
|
```sql
|
|
UPDATE users SET age = 31 WHERE name = 'Alice';
|
|
```
|
|
|
|
### DELETE
|
|
|
|
```sql
|
|
DELETE FROM users WHERE name = 'Bob';
|
|
```
|
|
|
|
## JOIN
|
|
|
|
```sql
|
|
SELECT u.name, o.total
|
|
FROM users u
|
|
INNER JOIN orders o ON u.id = o.user_id;
|
|
```
|
|
|
|
## CTE (تعبيرات الجدول المشترك)
|
|
|
|
```sql
|
|
WITH active_users AS (
|
|
SELECT * FROM users WHERE active = true
|
|
)
|
|
SELECT * FROM active_users;
|
|
```
|
|
|
|
## البحث المتجهي
|
|
|
|
```sql
|
|
INSERT articles { title := 'Nim Programming', embedding := [0.1, 0.2, 0.3, 0.4] };
|
|
|
|
SELECT title FROM articles
|
|
ORDER BY cosine_distance(embedding, [0.1, 0.2, 0.3, 0.4])
|
|
LIMIT 5;
|
|
```
|
|
|
|
## أنماط الرسم البياني
|
|
|
|
```sql
|
|
MATCH (p:Person)-[:KNOWS]->(friend:Person)
|
|
WHERE p.name = 'Alice'
|
|
RETURN friend.name;
|
|
```
|
|
|
|
## المعاملات
|
|
|
|
```sql
|
|
BEGIN;
|
|
INSERT users { name := 'Alice', age := 30 };
|
|
INSERT orders { user_id := last_insert_id(), total := 100 };
|
|
COMMIT;
|
|
|
|
-- مع نقطة حفظ
|
|
BEGIN;
|
|
INSERT users { name := 'Bob', age := 25 };
|
|
SAVEPOINT sp1;
|
|
INSERT orders { user_id := last_insert_id(), total := 200 };
|
|
-- خطأ، التراجع إلى نقطة الحفظ
|
|
ROLLBACK TO sp1;
|
|
COMMIT;
|
|
```
|
|
|
|
## البحث النصي الكامل
|
|
|
|
```sql
|
|
-- بحث أساسي
|
|
SELECT * FROM articles
|
|
WHERE MATCH(title, body) AGAINST('database programming');
|
|
|
|
-- مع درجة الصلة
|
|
SELECT title, relevance()
|
|
FROM articles
|
|
WHERE MATCH(title, body) AGAINST('Nim language')
|
|
ORDER BY relevance() DESC;
|
|
|
|
-- الوضع المنطقي
|
|
SELECT * FROM articles
|
|
WHERE MATCH(title, body) AGAINST('+Nim -Python' IN BOOLEAN MODE);
|
|
|
|
-- البحث الضبابي
|
|
SELECT * FROM articles
|
|
WHERE MATCH(title) AGAINST('programing' WITH FUZZINESS 2);
|
|
```
|
|
|
|
## الدوال المحددة من المستخدم
|
|
|
|
```sql
|
|
-- تسجيل UDF
|
|
CREATE FUNCTION greet(name str) -> str {
|
|
RETURN 'Hello, ' || name || '!';
|
|
};
|
|
|
|
-- استخدامها
|
|
SELECT greet(name) FROM users;
|
|
|
|
-- الدوال المدمجة
|
|
SELECT abs(-5), sqrt(16), lower('HELLO'), len('test');
|
|
```
|
|
|
|
## تلميحات الاستعلام
|
|
|
|
```sql
|
|
-- فرض استخدام الفهرس
|
|
SELECT /*+ USE_INDEX(idx_users_age) */ * FROM users WHERE age > 18;
|
|
|
|
-- فرض البحث المتجهي التقريبي
|
|
SELECT /*+ APPROXIMATE */ * FROM vectors
|
|
ORDER BY cosine_distance(embedding, [...])
|
|
LIMIT 10;
|
|
|
|
-- التنفيذ المتوازي
|
|
SELECT /*+ PARALLEL(4) */ * FROM large_table;
|
|
```
|
|
|
|
## دوال النوافذ
|
|
|
|
```sql
|
|
-- دوال الترتيب
|
|
SELECT
|
|
name,
|
|
department,
|
|
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn,
|
|
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS r,
|
|
DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dr
|
|
FROM employees;
|
|
|
|
-- دوال القيمة
|
|
SELECT
|
|
name,
|
|
salary,
|
|
LAG(salary, 1, 0) OVER (ORDER BY salary) AS prev_salary,
|
|
LEAD(salary, 1, 0) OVER (ORDER BY salary) AS next_salary,
|
|
FIRST_VALUE(name) OVER (PARTITION BY department ORDER BY salary) AS cheapest,
|
|
LAST_VALUE(name) OVER (PARTITION BY department ORDER BY salary) AS most_expensive
|
|
FROM employees;
|
|
|
|
-- دوال التوزيع
|
|
SELECT name, NTILE(4) OVER (ORDER BY salary) AS quartile FROM employees;
|
|
```
|
|
|
|
### مواصفات الإطار
|
|
|
|
```sql
|
|
-- إطار ROWS
|
|
SUM(salary) OVER (
|
|
PARTITION BY department
|
|
ORDER BY hire_date
|
|
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
|
|
)
|
|
|
|
-- إطار RANGE
|
|
SUM(salary) OVER (
|
|
PARTITION BY department
|
|
ORDER BY hire_date
|
|
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
|
|
)
|
|
```
|
|
|
|
## ERP متعدد المستأجرين
|
|
|
|
يدعم BaraDB تشغيل عدة شركات (مستأجرين) في مثيل قاعدة بيانات واحد، باستخدام **أمان مستوى الصف (RLS)** مع **متغيرات الجلسة**.
|
|
|
|
### متغيرات الجلسة
|
|
|
|
```sql
|
|
SET app.tenant_id = 'company-123';
|
|
SELECT current_setting('app.tenant_id') AS tenant;
|
|
```
|
|
|
|
### المستخدم / الدور الحالي
|
|
|
|
```sql
|
|
SELECT current_user AS me, current_role AS my_role;
|
|
```
|
|
|
|
### عزل المستأجر عبر RLS
|
|
|
|
```sql
|
|
-- تمكين RLS على جدول
|
|
ALTER TABLE invoices ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- إنشاء سياسة تصفية حسب المستأجر
|
|
CREATE POLICY tenant_isolation ON invoices
|
|
FOR SELECT USING (tenant_id = current_setting('app.tenant_id'));
|
|
|
|
-- كل جلسة ترى فقط بياناتها
|
|
SET app.tenant_id = 'company-a';
|
|
SELECT * FROM invoices; -- صفوف company-a فقط
|
|
```
|
|
|
|
### لماذا متعدد المستأجرين؟
|
|
|
|
- **مثيل واحد، مستأجرون كثيرون** — لا حاجة لتشغيل 100 قاعدة بيانات منفصلة
|
|
- **مستندات JSONB** — تخزين مخطط مرن، سهل إضافة حقول لكل مستأجر
|
|
- **RLS يضمن العزل** — قاعدة البيانات تفرض حدود المستأجر، وليس فقط التطبيق
|
|
|
|
## الكلمات المفتاحية المدعومة
|
|
|
|
| الفئة | الكلمات المفتاحية |
|
|
|----------|----------|
|
|
| DQL | SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING, LIMIT, OFFSET, DISTINCT |
|
|
| DML | INSERT, UPDATE, DELETE, SET, VALUES |
|
|
| DDL | CREATE TYPE, DROP TYPE, CREATE INDEX, DROP INDEX, ALTER TYPE |
|
|
| Join | INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN, ON |
|
|
| Set | UNION, UNION ALL, INTERSECT, EXCEPT |
|
|
| CTEs | WITH, RECURSIVE, AS |
|
|
| Case | CASE, WHEN, THEN, ELSE, END |
|
|
| Transaction | BEGIN, COMMIT, ROLLBACK, SAVEPOINT |
|
|
| Graph | MATCH, RETURN, WHERE, shortestPath, type |
|
|
| FTS | MATCH, AGAINST, relevance, IN BOOLEAN MODE, WITH FUZZINESS |
|
|
| Vector | cosine_distance, euclidean_distance, inner_product, l1_distance, l2_distance, <-> |
|
|
| JSON | ->, ->> |
|
|
| FTS | @@ (تطابق BM25) |
|
|
| Recovery | RECOVER TO TIMESTAMP |
|
|
| Functions | count, sum, avg, min, max, stddev, variance, abs, sqrt, lower, upper, len, trim, substr, now, last_insert_id, current_setting |
|
|
| Session | SET, current_setting, current_user, current_role |
|
|
| Window | OVER, PARTITION BY, ROWS, RANGE, UNBOUNDED PRECEDING, CURRENT ROW, FOLLOWING |
|
|
| Window Functions | ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG, FIRST_VALUE, LAST_VALUE, NTILE | |