215df1cdf3
- Add Formal Verification section to README and architecture docs - Document TLA+ specs for Raft, 2PC, MVCC, Replication - Add new BaraQL features: JSON path (->, ->>), FTS @@, CREATE INDEX USING FTS, RECOVER TO TIMESTAMP, UNION/INTERSECT/EXCEPT - Add OpenTelemetry tracing example to README - Update Quick Start to use nimble test/bench - Update EN and BG documentation
137 lines
2.3 KiB
Markdown
137 lines
2.3 KiB
Markdown
# BaraQL - Референция на Езика
|
|
|
|
BaraQL е SQL-съвместим език за заявки с разширения за графи, вектори и документи.
|
|
|
|
## Основни Заявки
|
|
|
|
### SELECT
|
|
|
|
```sql
|
|
SELECT name, age FROM users WHERE age > 18 ORDER BY name LIMIT 10;
|
|
```
|
|
|
|
### 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';
|
|
```
|
|
|
|
## Агрегати и Групиране
|
|
|
|
```sql
|
|
SELECT department, count(*), avg(salary)
|
|
FROM employees
|
|
GROUP BY department
|
|
HAVING count(*) > 5;
|
|
```
|
|
|
|
## JOINs
|
|
|
|
```sql
|
|
-- INNER JOIN
|
|
SELECT u.name, o.total
|
|
FROM users u
|
|
INNER JOIN orders o ON u.id = o.user_id;
|
|
|
|
-- LEFT JOIN
|
|
SELECT u.name, o.total
|
|
FROM users u
|
|
LEFT JOIN orders o ON u.id = o.user_id;
|
|
```
|
|
|
|
## CTEs (Common Table Expressions)
|
|
|
|
```sql
|
|
WITH active_users AS (
|
|
SELECT * FROM users WHERE active = true
|
|
)
|
|
SELECT * FROM active_users;
|
|
```
|
|
|
|
## CASE Изрази
|
|
|
|
```sql
|
|
SELECT name,
|
|
CASE
|
|
WHEN age < 18 THEN 'minor'
|
|
WHEN age < 65 THEN 'adult'
|
|
ELSE 'senior'
|
|
END AS category
|
|
FROM users;
|
|
```
|
|
|
|
## Схема
|
|
|
|
```sql
|
|
CREATE TYPE Person {
|
|
name: str,
|
|
age: int32
|
|
};
|
|
```
|
|
|
|
## Векторно Търсене
|
|
|
|
```sql
|
|
INSERT articles {
|
|
title := 'Nim Programming',
|
|
embedding := [0.1, 0.2, 0.3, ...]
|
|
};
|
|
|
|
SELECT title FROM articles
|
|
ORDER BY cosine_distance(embedding, [0.1, 0.2, 0.3, ...])
|
|
LIMIT 5;
|
|
```
|
|
|
|
## Графични Шаблони
|
|
|
|
```sql
|
|
MATCH (p:Person)-[:KNOWS]->(friend:Person)
|
|
WHERE p.name = 'Alice'
|
|
RETURN friend.name;
|
|
```
|
|
|
|
## Пълнотекстово Търсене
|
|
|
|
```sql
|
|
-- Създаване на FTS индекс
|
|
CREATE INDEX idx_fts ON articles(body) USING FTS;
|
|
|
|
-- Търсене с BM25 ранжиране
|
|
SELECT * FROM articles WHERE body @@ 'database programming';
|
|
```
|
|
|
|
## JSON Оператори
|
|
|
|
```sql
|
|
-- Извличане на JSON поле като JSON
|
|
SELECT data->'name' FROM users;
|
|
|
|
-- Извличане на JSON поле като текст
|
|
SELECT data->>'name' FROM users;
|
|
```
|
|
|
|
## Set Операции
|
|
|
|
```sql
|
|
SELECT name FROM customers
|
|
UNION ALL
|
|
SELECT name FROM suppliers;
|
|
```
|
|
|
|
## Възстановяване до Момент във Времето
|
|
|
|
```sql
|
|
RECOVER TO TIMESTAMP '2026-05-07T12:00:00';
|
|
``` |