ΠΠ°Π·Π° Π΄Π°Π½Π½ΡΡ Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ.
# Default build type - build
# Some aliases for cmake usage (read it to get actual commands)
./cmake.sh -h
# Basic commands:
./cmake.sh gen [(debug|release|sanitized)] # generate build-tree + build (default to debug)
# Tests
./cmake.sh [build-type] {({test [sep]}|valgrind)}
# Sanitized
./cmake.sh gen sanitized && ./cmake.sh sanitized test
# Run executable (if app/main.c is present):
./build/(debug|release|sanitized)/bin/dbms_exec
# Crossdev
./cmake.sh release gen reset -v -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++
# Clean project:
./cmake.sh {build-type} clean
# Reset project (rm -rf):
./cmake.sh {build-type} reset
# Commands can be combined.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΠ°ΡΡΠΈ. Π‘Π΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠ°ΡΡΡ β ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΏΠΎ ΡΠ΅ΡΠΈ Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΠΈΡ Π½Π°Π΄ ΡΠ°ΠΉΠ»ΠΎΠΌ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ. ΠΠΌΡ ΡΠ°Π»Π° Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ Π² ΡΠ»ΡΡΠ°Π΅ Π΅Π³ΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ. ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΠ°ΡΡΡ β Π² ΡΠΈΠΊΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄ ΡΠ΅ΠΊΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΠ°Ρ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ»Π°ΡΡΠ°Ρ Π΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΎΡΠ²Π΅Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ΡΡΠ°Ρ Π΅Π³ΠΎ Π² ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎ- ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄.
- ΠΠ·ΡΡΠΈΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
- ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΠ°ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ ΡΠ°ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
- Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΡΡΡΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ: ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ. ΠΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΡΠ°Π±ΠΎΡΡ. Π‘ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ast, ΡΠ°ΡΠΏΠ°ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΈΠΌ ΠΆΠ΅, Π·Π°ΡΠ΅ΠΌ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΎΠ½ΠΎ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΡΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°:
% ./build/sanitized/client/client_exec -h
Client options:
-h [ --help ] Show help
-a [ --address ] arg (=localhost) Server address
-p [ --port ] arg (=6543) Server port
-d [ --database ] arg (=.tmp-db.bin) Database file
Π‘Π΅ΡΠ²Π΅Ρ:
% ./build/sanitized/server/server_exec -h
Client options:
-h [ --help ] Show help
-p [ --port ] arg (=6543) Server port
-a [ --address ] arg (=0.0.0.0) Listened address
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ:
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΊΡΡΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ;
- ΠΠ°Π»ΠΈΠ΄Π½ΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΠ°ΡΡΠΈΠ½Π³Π°;
- ΠΠ°Π»ΠΈΡΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ;
- ΠΠ°Π»ΠΈΡΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ΅;
- Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ;
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΏΠ°ΡΡΠΈΠ½Π³Π΅, Π½ΠΎ Π½Π΅ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠΉ Π»Ρ (ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡ);
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°:
client
- ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅server
- ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅qpg
- (query plan generator) - ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΠ 2dbms
- (database manager) - ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΠ 1proto
- ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ protobuf ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡarc
- ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ/Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π΅ΡΠ΅Π²Π° Π²/ΠΈΠ· ΡΠΎΡΠΌΠ°Ρ/ΡΠΎΡΠΌΠ°ΡΠ° gRPC
ΠΠ»Ρ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ CMake.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ server-side streaming, ΡΠΎ ΠΎΠΏΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ.
- 1 ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ/ΠΈΠ»ΠΈ Ρ Π΅Π΄Π΅ΡΠΎΠΌ ΡΠ°Π±Π»ΠΈΡΡ.
- ΠΎΡ 0 ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΡΠ°Π±Π»ΠΈΡΡ.
- Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π·Π° ΡΠ°Π· (ΠΏΠΎΡΠ΅ΠΌΡ - Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΠ -2).
-
gRPC
(fetched) - Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠΎΠ²Π΅ΡΡ HTTP/2, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΠ²Π΅ΡΡ TCP/IP Π΄Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ.- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ protobuf ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
- ΠΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΠ²Π΅ΡΡ Server-side stream Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ
- Π£Π΄Π°Π»Π΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ.
-
fmt
(fetched) - ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. -
protobuf
(installed) - Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° C++ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. -
boost
(installed) - ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, algorithm.
ΠΠ°ΡΡΠ΅Ρ:
Created channel on target: localhost:6543.
Working with db: .tmp-db.bin.
> create table t1 fkasjfsafsa fasfsafasf;
ERROR(code=3): 1: error: syntax error
>
ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ - Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ:
> select * from t1 where c1 > 42;
Error: Table name should be present
Π’ΠΈΠΏ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ - Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ bool (eq*)(bool, int32)
:
> select * from t1 where t1.c1 > 42;
Error: Unsupported op type: 3, (4, 1)
ΠΠ΅ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΠ°ΡΡΠ΅Ρ:
> select c1 from t1;
Error: Projection in select is not supported
ΠΠ΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅:
> select * from t1 where t1.not_present and true;
Error: Column not found in table.
ΠΠΎΡΠ»Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ:
> create table t2 (c1 bool, c2 int32, c3 double, c4 str);
TABLE HEADER:
{
"queryType": "QUERY_TYPE_CREATE",
"columns": [
{
"columnName": "c1",
"columnType": "bool"
},
{
"columnName": "c2",
"columnType": "int32"
},
{
"columnName": "c3",
"columnType": "double"
},
{
"columnName": "c4",
"columnType": "string"
}
]
}
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ:
> drop table t1;
TABLE HEADER:
{
"queryType": "QUERY_TYPE_DROP"
}
ΠΡΡΠ°Π²ΠΊΠ° Π² ΡΠ°Π±Π»ΠΈΡΡ:
> insert into t1 values (52, "sdkaskfjsafsa");
TABLE HEADER:
{
"queryType": "QUERY_TYPE_INSERT",
"columns": [
{
"columnName": "c1",
"columnType": "int32"
},
{
"columnName": "c2",
"columnType": "string"
}
]
}
TABLE BODY:
{
"columns": [
{
"columnValue": "52"
},
{
"columnValue": "sdkaskfjsafsa"
}
]
}
> insert into t1 (c1) values (555555);
TABLE HEADER:
{
"queryType": "QUERY_TYPE_INSERT",
"columns": [
{
"columnName": "c1",
"columnType": "int32"
},
{
"columnName": "c2",
"columnType": "string"
}
]
}
TABLE BODY:
{
"columns": [
{
"columnValue": "555555"
},
{}
]
}
ΠΡΠ±ΠΎΡΠΊΠ° (select+join):
> select * from t1 cross_join t2;
TABLE HEADER:
{
"queryType": "QUERY_TYPE_SELECT",
"columns": [
{
"columnName": "c1",
"columnType": "int32"
},
{
"columnName": "c2",
"columnType": "bool"
},
{
"columnName": "c1",
"columnType": "bool"
},
{
"columnName": "c2",
"columnType": "int32"
},
{
"columnName": "c3",
"columnType": "double"
},
{
"columnName": "c4",
"columnType": "string"
}
]
}
TABLE BODY:
{
"columns": [
{
"columnValue": "5555"
},
{
"columnValue": "false"
},
{
"columnValue": "false"
},
{
"columnValue": "0"
},
{
"columnValue": "0.000000"
},
{}
]
}
{
"columns": [
{
"columnValue": "1111"
},
{
"columnValue": "true"
},
{
"columnValue": "false"
},
{
"columnValue": "0"
},
{
"columnValue": "0.000000"
},
{}
]
}
ΠΡΠ±ΠΎΡΠΊΠ° Ρ ΠΏΠΎΠ΄Π·Π°ΠΏΡΠΎΡΠΎΠΌ:
> select * from t1 cross_join (select * from t1 cross_join t2) as v1;
TABLE HEADER:
{
"queryType": "QUERY_TYPE_SELECT",
"columns": [
{
"columnName": "c1",
"columnType": "int32"
},
{
"columnName": "c2",
"columnType": "bool"
},
{
"columnName": "c1",
"columnType": "int32"
},
{
"columnName": "c2",
"columnType": "bool"
},
{
"columnName": "c1",
"columnType": "bool"
},
{
"columnName": "c2",
"columnType": "int32"
},
{
"columnName": "c3",
"columnType": "double"
},
{
"columnName": "c4",
"columnType": "string"
}
]
}
TABLE BODY:
{
"columns": [
{
"columnValue": "5555"
},
{
"columnValue": "false"
},
{
"columnValue": "5555"
},
{
"columnValue": "false"
},
{
"columnValue": "false"
},
{
"columnValue": "0"
},
{
"columnValue": "0.000000"
},
{}
]
}
{
"columns": [
{
"columnValue": "5555"
},
{
"columnValue": "false"
},
{
"columnValue": "1111"
},
{
"columnValue": "true"
},
{
"columnValue": "false"
},
{
"columnValue": "0"
},
{
"columnValue": "0.000000"
},
{}
]
}
{
"columns": [
{
"columnValue": "1111"
},
{
"columnValue": "true"
},
{
"columnValue": "5555"
},
{
"columnValue": "false"
},
{
"columnValue": "false"
},
{
"columnValue": "0"
},
{
"columnValue": "0.000000"
},
{}
]
}
{
"columns": [
{
"columnValue": "1111"
},
{
"columnValue": "true"
},
{
"columnValue": "1111"
},
{
"columnValue": "true"
},
{
"columnValue": "false"
},
{
"columnValue": "0"
},
{
"columnValue": "0.000000"
},
{}
]
}
ΠΡΠ±ΠΎΡΠΊΠ° ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΎΠΉ:
> select * from t3 cross_join t3 as t3a where t3.c1 in t3a.c1;
TABLE HEADER:
{
"queryType": "QUERY_TYPE_SELECT",
"columns": [
{
"columnName": "c1",
"columnType": "string"
},
{
"columnName": "c1",
"columnType": "string"
}
]
}
TABLE BODY:
{
"columns": [
{
"columnValue": "12345"
},
{
"columnValue": "1234567"
}
]
}
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:
> update t1 set c2=false where t1.c2 = true;
TABLE HEADER:
{
"queryType": "QUERY_TYPE_UPDATE",
"columns": [
{
"columnName": "c1",
"columnType": "int32"
},
{
"columnName": "c2",
"columnType": "bool"
}
]
}
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅:
> delete from t3;
TABLE HEADER:
{
"queryType": "QUERY_TYPE_DELETE",
"columns": [
{
"columnName": "c1",
"columnType": "string"
}
]
}
ΠΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² parse.l
ΠΈ parse.y
.
Π€ΠΎΡΠΌΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ proto: database.proto
, ast.proto
.
Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ: main.cpp
Π Ρ
ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π½Π°ΡΡΡΠ°Π΄Π°Π»ΡΡ Ρ move-ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ, Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΠΎΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» boost
, Π½Π°ΡΡΠΈΠ»ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ (Π²ΡΠΎΠ΄Π΅ Π±Ρ) cmake, ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΡΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ gRPC
.