Skip to content

zubrailx/academic-relational-db

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

40 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Academic relational database

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… с ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрным взаимодСйствиСм.

Build system

# 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) - ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π›Π  2
  • dbms - (database manager) - ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π›Π  1
  • proto - описанныС protobuf сообщСния
  • arc - сСриализация/дСсСриализация Π΄Π΅Ρ€Π΅Π²Π° Π²/ΠΈΠ· Ρ„ΠΎΡ€ΠΌΠ°Ρ‚/Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° gRPC

Для Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ CMake.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΠΌΠ΅Π½ сообщСниями происходит посрСдством server-side streaming, Ρ‚ΠΎ ΠΎΠΏΠΈΡˆΡƒ порядок сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚.

  1. 1 сообщСниС с описаниСм ошибки ΠΈ/ΠΈΠ»ΠΈ Ρ…Π΅Π΄Π΅Ρ€ΠΎΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
  2. ΠΎΡ‚ 0 сообщСний с содСрТимым Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
  3. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ нСсколько сообщСний Π·Π° Ρ€Π°Π· (ΠΏΠΎΡ‡Π΅ΠΌΡƒ - Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π›Π -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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published