diff --git a/0.7.4/actions-overview/index.html b/0.7.4/actions-overview/index.html index 32ba5f11e..75c0bc97d 100644 --- a/0.7.4/actions-overview/index.html +++ b/0.7.4/actions-overview/index.html @@ -4,7 +4,7 @@ Actions and Querying | Skytable - + diff --git a/0.7.4/actions/auth/index.html b/0.7.4/actions/auth/index.html index 9b707fe03..afca2ccd8 100644 --- a/0.7.4/actions/auth/index.html +++ b/0.7.4/actions/auth/index.html @@ -4,7 +4,7 @@ AUTH | Skytable - + diff --git a/0.7.4/actions/dbsize/index.html b/0.7.4/actions/dbsize/index.html index 86dbabb8e..0967ff165 100644 --- a/0.7.4/actions/dbsize/index.html +++ b/0.7.4/actions/dbsize/index.html @@ -4,7 +4,7 @@ DBSIZE | Skytable - + diff --git a/0.7.4/actions/del/index.html b/0.7.4/actions/del/index.html index c11f1d3aa..312425632 100644 --- a/0.7.4/actions/del/index.html +++ b/0.7.4/actions/del/index.html @@ -4,7 +4,7 @@ DEL | Skytable - + diff --git a/0.7.4/actions/exists/index.html b/0.7.4/actions/exists/index.html index 22cb478e0..389b190e9 100644 --- a/0.7.4/actions/exists/index.html +++ b/0.7.4/actions/exists/index.html @@ -4,7 +4,7 @@ EXISTS | Skytable - + diff --git a/0.7.4/actions/flushdb/index.html b/0.7.4/actions/flushdb/index.html index f1ff2f71c..eafb7d205 100644 --- a/0.7.4/actions/flushdb/index.html +++ b/0.7.4/actions/flushdb/index.html @@ -4,7 +4,7 @@ FLUSHDB | Skytable - + diff --git a/0.7.4/actions/get/index.html b/0.7.4/actions/get/index.html index c4979d167..d508a285d 100644 --- a/0.7.4/actions/get/index.html +++ b/0.7.4/actions/get/index.html @@ -4,7 +4,7 @@ GET | Skytable - + diff --git a/0.7.4/actions/heya/index.html b/0.7.4/actions/heya/index.html index f64fa0099..a783d4462 100644 --- a/0.7.4/actions/heya/index.html +++ b/0.7.4/actions/heya/index.html @@ -4,7 +4,7 @@ HEYA | Skytable - + diff --git a/0.7.4/actions/keylen/index.html b/0.7.4/actions/keylen/index.html index 99139d8fa..f4882adce 100644 --- a/0.7.4/actions/keylen/index.html +++ b/0.7.4/actions/keylen/index.html @@ -4,7 +4,7 @@ KEYLEN | Skytable - + diff --git a/0.7.4/actions/lget/index.html b/0.7.4/actions/lget/index.html index 3307a4165..53c446662 100644 --- a/0.7.4/actions/lget/index.html +++ b/0.7.4/actions/lget/index.html @@ -4,7 +4,7 @@ LGET | Skytable - + diff --git a/0.7.4/actions/lmod/index.html b/0.7.4/actions/lmod/index.html index 446fbe48d..85385798f 100644 --- a/0.7.4/actions/lmod/index.html +++ b/0.7.4/actions/lmod/index.html @@ -4,7 +4,7 @@ LMOD | Skytable - + diff --git a/0.7.4/actions/lset/index.html b/0.7.4/actions/lset/index.html index 522acbc6c..809ca1562 100644 --- a/0.7.4/actions/lset/index.html +++ b/0.7.4/actions/lset/index.html @@ -4,7 +4,7 @@ LSET | Skytable - + diff --git a/0.7.4/actions/lskeys/index.html b/0.7.4/actions/lskeys/index.html index fce7e8bef..9c69319b3 100644 --- a/0.7.4/actions/lskeys/index.html +++ b/0.7.4/actions/lskeys/index.html @@ -4,7 +4,7 @@ LSKEYS | Skytable - + diff --git a/0.7.4/actions/mget/index.html b/0.7.4/actions/mget/index.html index 2085d7367..6be416a24 100644 --- a/0.7.4/actions/mget/index.html +++ b/0.7.4/actions/mget/index.html @@ -4,7 +4,7 @@ MGET | Skytable - + diff --git a/0.7.4/actions/mksnap/index.html b/0.7.4/actions/mksnap/index.html index 37384b64e..bb6559873 100644 --- a/0.7.4/actions/mksnap/index.html +++ b/0.7.4/actions/mksnap/index.html @@ -4,7 +4,7 @@ MKSNAP | Skytable - + diff --git a/0.7.4/actions/mpop/index.html b/0.7.4/actions/mpop/index.html index f1d06859c..1f5000d12 100644 --- a/0.7.4/actions/mpop/index.html +++ b/0.7.4/actions/mpop/index.html @@ -4,7 +4,7 @@ MPOP | Skytable - + diff --git a/0.7.4/actions/mset/index.html b/0.7.4/actions/mset/index.html index 552522a00..9d8a99a54 100644 --- a/0.7.4/actions/mset/index.html +++ b/0.7.4/actions/mset/index.html @@ -4,7 +4,7 @@ MSET | Skytable - + diff --git a/0.7.4/actions/mupdate/index.html b/0.7.4/actions/mupdate/index.html index e02b71203..de39c4d06 100644 --- a/0.7.4/actions/mupdate/index.html +++ b/0.7.4/actions/mupdate/index.html @@ -4,7 +4,7 @@ MUPDATE | Skytable - + diff --git a/0.7.4/actions/pop/index.html b/0.7.4/actions/pop/index.html index c394bc974..430668a94 100644 --- a/0.7.4/actions/pop/index.html +++ b/0.7.4/actions/pop/index.html @@ -4,7 +4,7 @@ POP | Skytable - + diff --git a/0.7.4/actions/sdel/index.html b/0.7.4/actions/sdel/index.html index 37d10a9be..b64de0762 100644 --- a/0.7.4/actions/sdel/index.html +++ b/0.7.4/actions/sdel/index.html @@ -4,7 +4,7 @@ SDEL | Skytable - + diff --git a/0.7.4/actions/set/index.html b/0.7.4/actions/set/index.html index dcbde6b45..45a83f176 100644 --- a/0.7.4/actions/set/index.html +++ b/0.7.4/actions/set/index.html @@ -4,7 +4,7 @@ SET | Skytable - + diff --git a/0.7.4/actions/sset/index.html b/0.7.4/actions/sset/index.html index 5c9df5fb0..1f52bbfe3 100644 --- a/0.7.4/actions/sset/index.html +++ b/0.7.4/actions/sset/index.html @@ -4,7 +4,7 @@ SSET | Skytable - + diff --git a/0.7.4/actions/supdate/index.html b/0.7.4/actions/supdate/index.html index 6973cf1e5..5c710f2d5 100644 --- a/0.7.4/actions/supdate/index.html +++ b/0.7.4/actions/supdate/index.html @@ -4,7 +4,7 @@ SUPDATE | Skytable - + diff --git a/0.7.4/actions/update/index.html b/0.7.4/actions/update/index.html index 5ec6783a8..39b4c33ac 100644 --- a/0.7.4/actions/update/index.html +++ b/0.7.4/actions/update/index.html @@ -4,7 +4,7 @@ UPDATE | Skytable - + diff --git a/0.7.4/actions/uset/index.html b/0.7.4/actions/uset/index.html index a0b4fee4f..1cdfe47ad 100644 --- a/0.7.4/actions/uset/index.html +++ b/0.7.4/actions/uset/index.html @@ -4,7 +4,7 @@ USET | Skytable - + diff --git a/0.7.4/actions/whereami/index.html b/0.7.4/actions/whereami/index.html index e40ebecfd..31bb04a5a 100644 --- a/0.7.4/actions/whereami/index.html +++ b/0.7.4/actions/whereami/index.html @@ -4,7 +4,7 @@ WHEREAMI | Skytable - + diff --git a/0.7.4/all-actions/index.html b/0.7.4/all-actions/index.html index 2a996fddf..a43fa4bf3 100644 --- a/0.7.4/all-actions/index.html +++ b/0.7.4/all-actions/index.html @@ -4,7 +4,7 @@ Index of actions | Skytable - + diff --git a/0.7.4/auth/index.html b/0.7.4/auth/index.html index d4e515ff1..c9c324762 100644 --- a/0.7.4/auth/index.html +++ b/0.7.4/auth/index.html @@ -4,7 +4,7 @@ Authentication and authorization | Skytable - + diff --git a/0.7.4/benchmarking/index.html b/0.7.4/benchmarking/index.html index be9f1aebf..adc0a75ea 100644 --- a/0.7.4/benchmarking/index.html +++ b/0.7.4/benchmarking/index.html @@ -4,7 +4,7 @@ Benchmarking | Skytable - + diff --git a/0.7.4/building-from-source/index.html b/0.7.4/building-from-source/index.html index 7b64b9634..daa2df884 100644 --- a/0.7.4/building-from-source/index.html +++ b/0.7.4/building-from-source/index.html @@ -4,7 +4,7 @@ Building from source | Skytable - + diff --git a/0.7.4/clients/index.html b/0.7.4/clients/index.html index f90a38a7c..f1813e507 100644 --- a/0.7.4/clients/index.html +++ b/0.7.4/clients/index.html @@ -4,7 +4,7 @@ Client drivers | Skytable - + diff --git a/0.7.4/config-cmd/index.html b/0.7.4/config-cmd/index.html index 380112aa2..db20eb4f9 100644 --- a/0.7.4/config-cmd/index.html +++ b/0.7.4/config-cmd/index.html @@ -4,7 +4,7 @@ Command-line configuration | Skytable - + diff --git a/0.7.4/config-env/index.html b/0.7.4/config-env/index.html index ae18f52b5..1d64de24a 100644 --- a/0.7.4/config-env/index.html +++ b/0.7.4/config-env/index.html @@ -4,7 +4,7 @@ Environment Variables | Skytable - + diff --git a/0.7.4/config-files/index.html b/0.7.4/config-files/index.html index 36d1e905e..6598d0691 100644 --- a/0.7.4/config-files/index.html +++ b/0.7.4/config-files/index.html @@ -4,7 +4,7 @@ Configuration Files | Skytable - + diff --git a/0.7.4/config/index.html b/0.7.4/config/index.html index 5d48b4889..5b5b1d260 100644 --- a/0.7.4/config/index.html +++ b/0.7.4/config/index.html @@ -4,7 +4,7 @@ Configuration basics | Skytable - + diff --git a/0.7.4/containers/index.html b/0.7.4/containers/index.html index ddf42f7e4..a708d6295 100644 --- a/0.7.4/containers/index.html +++ b/0.7.4/containers/index.html @@ -4,7 +4,7 @@ Containers | Skytable - + diff --git a/0.7.4/ddl/index.html b/0.7.4/ddl/index.html index e1db4b70b..aa5578108 100644 --- a/0.7.4/ddl/index.html +++ b/0.7.4/ddl/index.html @@ -4,7 +4,7 @@ DDL | Skytable - + diff --git a/0.7.4/deployment-notes/index.html b/0.7.4/deployment-notes/index.html index ef4678859..7d4f85b18 100644 --- a/0.7.4/deployment-notes/index.html +++ b/0.7.4/deployment-notes/index.html @@ -4,7 +4,7 @@ Deployment notes | Skytable - + diff --git a/0.7.4/examples/index.html b/0.7.4/examples/index.html index 829f74599..de559a990 100644 --- a/0.7.4/examples/index.html +++ b/0.7.4/examples/index.html @@ -4,7 +4,7 @@ Examples | Skytable - + diff --git a/0.7.4/getting-started/index.html b/0.7.4/getting-started/index.html index 2fb13c479..1b4748da9 100644 --- a/0.7.4/getting-started/index.html +++ b/0.7.4/getting-started/index.html @@ -4,7 +4,7 @@ Getting Started | Skytable - + diff --git a/0.7.4/index.html b/0.7.4/index.html index ab07a301b..c7acee521 100644 --- a/0.7.4/index.html +++ b/0.7.4/index.html @@ -4,7 +4,7 @@ Introduction | Skytable - + diff --git a/0.7.4/perf-guide/index.html b/0.7.4/perf-guide/index.html index 583c37a03..39318cca0 100644 --- a/0.7.4/perf-guide/index.html +++ b/0.7.4/perf-guide/index.html @@ -4,7 +4,7 @@ Performance Guide | Skytable - + diff --git a/0.7.4/persistence/index.html b/0.7.4/persistence/index.html index ca2d72c0b..d170edc0f 100644 --- a/0.7.4/persistence/index.html +++ b/0.7.4/persistence/index.html @@ -4,7 +4,7 @@ Persistence | Skytable - + diff --git a/0.7.4/protocol/data-types/index.html b/0.7.4/protocol/data-types/index.html index 0ce144579..eb25f2242 100644 --- a/0.7.4/protocol/data-types/index.html +++ b/0.7.4/protocol/data-types/index.html @@ -4,7 +4,7 @@ Data Types | Skytable - + diff --git a/0.7.4/protocol/errors/index.html b/0.7.4/protocol/errors/index.html index a4024e1df..67bdc61bf 100644 --- a/0.7.4/protocol/errors/index.html +++ b/0.7.4/protocol/errors/index.html @@ -4,7 +4,7 @@ Error Strings | Skytable - + diff --git a/0.7.4/protocol/response-codes/index.html b/0.7.4/protocol/response-codes/index.html index cd225ac18..b17878a8d 100644 --- a/0.7.4/protocol/response-codes/index.html +++ b/0.7.4/protocol/response-codes/index.html @@ -4,7 +4,7 @@ Response Codes | Skytable - + diff --git a/0.7.4/protocol/skyhash/index.html b/0.7.4/protocol/skyhash/index.html index 75800db7b..73c370212 100644 --- a/0.7.4/protocol/skyhash/index.html +++ b/0.7.4/protocol/skyhash/index.html @@ -4,7 +4,7 @@ Skyhash Protocol 1.0 | Skytable - + diff --git a/0.7.4/snapshots/index.html b/0.7.4/snapshots/index.html index cc366dfc6..2b4ac00ce 100644 --- a/0.7.4/snapshots/index.html +++ b/0.7.4/snapshots/index.html @@ -4,7 +4,7 @@ Snapshots | Skytable - + diff --git a/0.7.4/ssl/index.html b/0.7.4/ssl/index.html index 6233cf02d..5f594fca7 100644 --- a/0.7.4/ssl/index.html +++ b/0.7.4/ssl/index.html @@ -4,7 +4,7 @@ TLS configuration | Skytable - + diff --git a/0.7.5/actions-overview/index.html b/0.7.5/actions-overview/index.html index 76f60637f..beca152b4 100644 --- a/0.7.5/actions-overview/index.html +++ b/0.7.5/actions-overview/index.html @@ -4,7 +4,7 @@ Actions and Querying | Skytable - + diff --git a/0.7.5/actions/auth/index.html b/0.7.5/actions/auth/index.html index c43d71fe5..684318e00 100644 --- a/0.7.5/actions/auth/index.html +++ b/0.7.5/actions/auth/index.html @@ -4,7 +4,7 @@ AUTH | Skytable - + diff --git a/0.7.5/actions/dbsize/index.html b/0.7.5/actions/dbsize/index.html index 257048b0a..f9324caac 100644 --- a/0.7.5/actions/dbsize/index.html +++ b/0.7.5/actions/dbsize/index.html @@ -4,7 +4,7 @@ DBSIZE | Skytable - + diff --git a/0.7.5/actions/del/index.html b/0.7.5/actions/del/index.html index 8a21a20be..e5463a8ef 100644 --- a/0.7.5/actions/del/index.html +++ b/0.7.5/actions/del/index.html @@ -4,7 +4,7 @@ DEL | Skytable - + diff --git a/0.7.5/actions/exists/index.html b/0.7.5/actions/exists/index.html index 256930f8d..f258fcefc 100644 --- a/0.7.5/actions/exists/index.html +++ b/0.7.5/actions/exists/index.html @@ -4,7 +4,7 @@ EXISTS | Skytable - + diff --git a/0.7.5/actions/flushdb/index.html b/0.7.5/actions/flushdb/index.html index c9b5e783d..b5e0b72da 100644 --- a/0.7.5/actions/flushdb/index.html +++ b/0.7.5/actions/flushdb/index.html @@ -4,7 +4,7 @@ FLUSHDB | Skytable - + diff --git a/0.7.5/actions/get/index.html b/0.7.5/actions/get/index.html index 1be64beec..2e773e512 100644 --- a/0.7.5/actions/get/index.html +++ b/0.7.5/actions/get/index.html @@ -4,7 +4,7 @@ GET | Skytable - + diff --git a/0.7.5/actions/heya/index.html b/0.7.5/actions/heya/index.html index 60a9c287a..ab8bec7d4 100644 --- a/0.7.5/actions/heya/index.html +++ b/0.7.5/actions/heya/index.html @@ -4,7 +4,7 @@ HEYA | Skytable - + diff --git a/0.7.5/actions/keylen/index.html b/0.7.5/actions/keylen/index.html index 3869ea37f..96a7cfb72 100644 --- a/0.7.5/actions/keylen/index.html +++ b/0.7.5/actions/keylen/index.html @@ -4,7 +4,7 @@ KEYLEN | Skytable - + diff --git a/0.7.5/actions/lget/index.html b/0.7.5/actions/lget/index.html index a357c0457..2ea34aed3 100644 --- a/0.7.5/actions/lget/index.html +++ b/0.7.5/actions/lget/index.html @@ -4,7 +4,7 @@ LGET | Skytable - + diff --git a/0.7.5/actions/lmod/index.html b/0.7.5/actions/lmod/index.html index eede1b35f..3ee2831fb 100644 --- a/0.7.5/actions/lmod/index.html +++ b/0.7.5/actions/lmod/index.html @@ -4,7 +4,7 @@ LMOD | Skytable - + diff --git a/0.7.5/actions/lset/index.html b/0.7.5/actions/lset/index.html index e3698d6fe..7735e78d1 100644 --- a/0.7.5/actions/lset/index.html +++ b/0.7.5/actions/lset/index.html @@ -4,7 +4,7 @@ LSET | Skytable - + diff --git a/0.7.5/actions/lskeys/index.html b/0.7.5/actions/lskeys/index.html index a3f20502e..62257d18a 100644 --- a/0.7.5/actions/lskeys/index.html +++ b/0.7.5/actions/lskeys/index.html @@ -4,7 +4,7 @@ LSKEYS | Skytable - + diff --git a/0.7.5/actions/mget/index.html b/0.7.5/actions/mget/index.html index 8316ae7b9..1d0d9cfd5 100644 --- a/0.7.5/actions/mget/index.html +++ b/0.7.5/actions/mget/index.html @@ -4,7 +4,7 @@ MGET | Skytable - + diff --git a/0.7.5/actions/mksnap/index.html b/0.7.5/actions/mksnap/index.html index 228aaee67..f458ab25f 100644 --- a/0.7.5/actions/mksnap/index.html +++ b/0.7.5/actions/mksnap/index.html @@ -4,7 +4,7 @@ MKSNAP | Skytable - + diff --git a/0.7.5/actions/mpop/index.html b/0.7.5/actions/mpop/index.html index 8d63bd243..d595b3239 100644 --- a/0.7.5/actions/mpop/index.html +++ b/0.7.5/actions/mpop/index.html @@ -4,7 +4,7 @@ MPOP | Skytable - + diff --git a/0.7.5/actions/mset/index.html b/0.7.5/actions/mset/index.html index 85d715671..b6c78dab3 100644 --- a/0.7.5/actions/mset/index.html +++ b/0.7.5/actions/mset/index.html @@ -4,7 +4,7 @@ MSET | Skytable - + diff --git a/0.7.5/actions/mupdate/index.html b/0.7.5/actions/mupdate/index.html index f9e18e5cf..c4e41b2ae 100644 --- a/0.7.5/actions/mupdate/index.html +++ b/0.7.5/actions/mupdate/index.html @@ -4,7 +4,7 @@ MUPDATE | Skytable - + diff --git a/0.7.5/actions/pop/index.html b/0.7.5/actions/pop/index.html index 679a8997d..b5fc92b98 100644 --- a/0.7.5/actions/pop/index.html +++ b/0.7.5/actions/pop/index.html @@ -4,7 +4,7 @@ POP | Skytable - + diff --git a/0.7.5/actions/sdel/index.html b/0.7.5/actions/sdel/index.html index 4db512af2..f4a8c51c1 100644 --- a/0.7.5/actions/sdel/index.html +++ b/0.7.5/actions/sdel/index.html @@ -4,7 +4,7 @@ SDEL | Skytable - + diff --git a/0.7.5/actions/set/index.html b/0.7.5/actions/set/index.html index ca761936b..91734e887 100644 --- a/0.7.5/actions/set/index.html +++ b/0.7.5/actions/set/index.html @@ -4,7 +4,7 @@ SET | Skytable - + diff --git a/0.7.5/actions/sset/index.html b/0.7.5/actions/sset/index.html index 4f13d2936..cec85a806 100644 --- a/0.7.5/actions/sset/index.html +++ b/0.7.5/actions/sset/index.html @@ -4,7 +4,7 @@ SSET | Skytable - + diff --git a/0.7.5/actions/supdate/index.html b/0.7.5/actions/supdate/index.html index a3835a206..2ee74ce8d 100644 --- a/0.7.5/actions/supdate/index.html +++ b/0.7.5/actions/supdate/index.html @@ -4,7 +4,7 @@ SUPDATE | Skytable - + diff --git a/0.7.5/actions/sys/index.html b/0.7.5/actions/sys/index.html index f799241ce..04666fcee 100644 --- a/0.7.5/actions/sys/index.html +++ b/0.7.5/actions/sys/index.html @@ -4,7 +4,7 @@ SYS | Skytable - + diff --git a/0.7.5/actions/update/index.html b/0.7.5/actions/update/index.html index f5a5a0576..2aaa1436b 100644 --- a/0.7.5/actions/update/index.html +++ b/0.7.5/actions/update/index.html @@ -4,7 +4,7 @@ UPDATE | Skytable - + diff --git a/0.7.5/actions/uset/index.html b/0.7.5/actions/uset/index.html index 8c3bbeda5..ca0f5570f 100644 --- a/0.7.5/actions/uset/index.html +++ b/0.7.5/actions/uset/index.html @@ -4,7 +4,7 @@ USET | Skytable - + diff --git a/0.7.5/actions/whereami/index.html b/0.7.5/actions/whereami/index.html index d079bb0d3..8cca0acec 100644 --- a/0.7.5/actions/whereami/index.html +++ b/0.7.5/actions/whereami/index.html @@ -4,7 +4,7 @@ WHEREAMI | Skytable - + diff --git a/0.7.5/all-actions/index.html b/0.7.5/all-actions/index.html index 5e491f5c4..d72966531 100644 --- a/0.7.5/all-actions/index.html +++ b/0.7.5/all-actions/index.html @@ -4,7 +4,7 @@ Index of actions | Skytable - + diff --git a/0.7.5/auth/index.html b/0.7.5/auth/index.html index 04fc9198b..290f9e248 100644 --- a/0.7.5/auth/index.html +++ b/0.7.5/auth/index.html @@ -4,7 +4,7 @@ Authentication and authorization | Skytable - + diff --git a/0.7.5/benchmarking/index.html b/0.7.5/benchmarking/index.html index fa08a788b..e77805bab 100644 --- a/0.7.5/benchmarking/index.html +++ b/0.7.5/benchmarking/index.html @@ -4,7 +4,7 @@ Benchmarking | Skytable - + diff --git a/0.7.5/building-from-source/index.html b/0.7.5/building-from-source/index.html index f4539c595..1ccde3179 100644 --- a/0.7.5/building-from-source/index.html +++ b/0.7.5/building-from-source/index.html @@ -4,7 +4,7 @@ Building from source | Skytable - + diff --git a/0.7.5/clients/index.html b/0.7.5/clients/index.html index 10a8e3a43..24f091ce9 100644 --- a/0.7.5/clients/index.html +++ b/0.7.5/clients/index.html @@ -4,7 +4,7 @@ Client drivers | Skytable - + diff --git a/0.7.5/config-cmd/index.html b/0.7.5/config-cmd/index.html index 8e76c23d0..b38601b22 100644 --- a/0.7.5/config-cmd/index.html +++ b/0.7.5/config-cmd/index.html @@ -4,7 +4,7 @@ Command-line configuration | Skytable - + diff --git a/0.7.5/config-env/index.html b/0.7.5/config-env/index.html index a3675db20..f0e88b5fe 100644 --- a/0.7.5/config-env/index.html +++ b/0.7.5/config-env/index.html @@ -4,7 +4,7 @@ Environment Variables | Skytable - + diff --git a/0.7.5/config-files/index.html b/0.7.5/config-files/index.html index 84fa8296a..9316b5644 100644 --- a/0.7.5/config-files/index.html +++ b/0.7.5/config-files/index.html @@ -4,7 +4,7 @@ Configuration Files | Skytable - + diff --git a/0.7.5/config/index.html b/0.7.5/config/index.html index 0a21816ed..031593e25 100644 --- a/0.7.5/config/index.html +++ b/0.7.5/config/index.html @@ -4,7 +4,7 @@ Configuration basics | Skytable - + diff --git a/0.7.5/containers/index.html b/0.7.5/containers/index.html index 17490063a..7b77c6de4 100644 --- a/0.7.5/containers/index.html +++ b/0.7.5/containers/index.html @@ -4,7 +4,7 @@ Containers | Skytable - + diff --git a/0.7.5/ddl/index.html b/0.7.5/ddl/index.html index 724a44d98..e256301d1 100644 --- a/0.7.5/ddl/index.html +++ b/0.7.5/ddl/index.html @@ -4,7 +4,7 @@ DDL | Skytable - + diff --git a/0.7.5/deployment-notes/index.html b/0.7.5/deployment-notes/index.html index 987998dba..b2729eb40 100644 --- a/0.7.5/deployment-notes/index.html +++ b/0.7.5/deployment-notes/index.html @@ -4,7 +4,7 @@ Deployment notes | Skytable - + diff --git a/0.7.5/examples/index.html b/0.7.5/examples/index.html index bcc97e23d..2f6649ba0 100644 --- a/0.7.5/examples/index.html +++ b/0.7.5/examples/index.html @@ -4,7 +4,7 @@ Examples | Skytable - + diff --git a/0.7.5/getting-started/index.html b/0.7.5/getting-started/index.html index bb6fdc42f..083b89d6a 100644 --- a/0.7.5/getting-started/index.html +++ b/0.7.5/getting-started/index.html @@ -4,7 +4,7 @@ Getting Started | Skytable - + diff --git a/0.7.5/index.html b/0.7.5/index.html index e3553a9f7..4c7d45bc8 100644 --- a/0.7.5/index.html +++ b/0.7.5/index.html @@ -4,7 +4,7 @@ Introduction | Skytable - + diff --git a/0.7.5/perf-guide/index.html b/0.7.5/perf-guide/index.html index ca8f9d9c0..0e8841cd6 100644 --- a/0.7.5/perf-guide/index.html +++ b/0.7.5/perf-guide/index.html @@ -4,7 +4,7 @@ Performance Guide | Skytable - + diff --git a/0.7.5/persistence/index.html b/0.7.5/persistence/index.html index 12ed6e3d9..a13fbc91f 100644 --- a/0.7.5/persistence/index.html +++ b/0.7.5/persistence/index.html @@ -4,7 +4,7 @@ Persistence | Skytable - + diff --git a/0.7.5/protocol/data-types/index.html b/0.7.5/protocol/data-types/index.html index 193d43f55..db710a348 100644 --- a/0.7.5/protocol/data-types/index.html +++ b/0.7.5/protocol/data-types/index.html @@ -4,7 +4,7 @@ Data Types | Skytable - + diff --git a/0.7.5/protocol/errors/index.html b/0.7.5/protocol/errors/index.html index e22258d40..cd98d7ea2 100644 --- a/0.7.5/protocol/errors/index.html +++ b/0.7.5/protocol/errors/index.html @@ -4,7 +4,7 @@ Error Strings | Skytable - + diff --git a/0.7.5/protocol/response-codes/index.html b/0.7.5/protocol/response-codes/index.html index 56d1924f8..3d3a9af3d 100644 --- a/0.7.5/protocol/response-codes/index.html +++ b/0.7.5/protocol/response-codes/index.html @@ -4,7 +4,7 @@ Response Codes | Skytable - + diff --git a/0.7.5/protocol/skyhash/index.html b/0.7.5/protocol/skyhash/index.html index d0cdd1a21..54e4ab920 100644 --- a/0.7.5/protocol/skyhash/index.html +++ b/0.7.5/protocol/skyhash/index.html @@ -4,7 +4,7 @@ Skyhash Protocol 1.0 | Skytable - + diff --git a/0.7.5/snapshots/index.html b/0.7.5/snapshots/index.html index 1f3e53f62..3480c30e6 100644 --- a/0.7.5/snapshots/index.html +++ b/0.7.5/snapshots/index.html @@ -4,7 +4,7 @@ Snapshots | Skytable - + diff --git a/0.7.5/ssl/index.html b/0.7.5/ssl/index.html index 22b12e8f8..d389e1e92 100644 --- a/0.7.5/ssl/index.html +++ b/0.7.5/ssl/index.html @@ -4,7 +4,7 @@ TLS configuration | Skytable - + diff --git a/0.8.0/architecture/index.html b/0.8.0/architecture/index.html index 66757fa68..ac809df82 100644 --- a/0.8.0/architecture/index.html +++ b/0.8.0/architecture/index.html @@ -4,7 +4,7 @@ Architecture | Skytable - + diff --git a/0.8.0/benchmarking/index.html b/0.8.0/benchmarking/index.html index 16075ebf4..3e8c55e5f 100644 --- a/0.8.0/benchmarking/index.html +++ b/0.8.0/benchmarking/index.html @@ -4,7 +4,7 @@ Benchmarking | Skytable - + diff --git a/0.8.0/blueql/dcl/index.html b/0.8.0/blueql/dcl/index.html index 0e17ce190..0e747256b 100644 --- a/0.8.0/blueql/dcl/index.html +++ b/0.8.0/blueql/dcl/index.html @@ -4,7 +4,7 @@ DCL | Skytable - + diff --git a/0.8.0/blueql/ddl/index.html b/0.8.0/blueql/ddl/index.html index a8e78fa47..e13e3efb6 100644 --- a/0.8.0/blueql/ddl/index.html +++ b/0.8.0/blueql/ddl/index.html @@ -4,7 +4,7 @@ DDL | Skytable - + diff --git a/0.8.0/blueql/dml/index.html b/0.8.0/blueql/dml/index.html index c78cab5ed..f787bdd75 100644 --- a/0.8.0/blueql/dml/index.html +++ b/0.8.0/blueql/dml/index.html @@ -4,7 +4,7 @@ DML | Skytable - + diff --git a/0.8.0/blueql/overview/index.html b/0.8.0/blueql/overview/index.html index c838577a3..74341da69 100644 --- a/0.8.0/blueql/overview/index.html +++ b/0.8.0/blueql/overview/index.html @@ -4,7 +4,7 @@ Overview | Skytable - + diff --git a/0.8.0/category/blueql/index.html b/0.8.0/category/blueql/index.html index 36e658de9..e8ee96db6 100644 --- a/0.8.0/category/blueql/index.html +++ b/0.8.0/category/blueql/index.html @@ -4,7 +4,7 @@ BlueQL | Skytable - + diff --git a/0.8.0/category/system-management/index.html b/0.8.0/category/system-management/index.html index 7749a8349..2ef221534 100644 --- a/0.8.0/category/system-management/index.html +++ b/0.8.0/category/system-management/index.html @@ -4,7 +4,7 @@ System Management | Skytable - + diff --git a/0.8.0/deployment/index.html b/0.8.0/deployment/index.html index 941457fcd..964b55457 100644 --- a/0.8.0/deployment/index.html +++ b/0.8.0/deployment/index.html @@ -4,7 +4,7 @@ Deployment | Skytable - + diff --git a/0.8.0/index.html b/0.8.0/index.html index 4f912b177..8377c72b3 100644 --- a/0.8.0/index.html +++ b/0.8.0/index.html @@ -4,7 +4,7 @@ Introduction | Skytable - + diff --git a/0.8.0/installation/index.html b/0.8.0/installation/index.html index acb5c8c4e..7241f1351 100644 --- a/0.8.0/installation/index.html +++ b/0.8.0/installation/index.html @@ -4,7 +4,7 @@ Installation | Skytable - + diff --git a/0.8.0/libraries/index.html b/0.8.0/libraries/index.html index 062e9d04f..1784e96e5 100644 --- a/0.8.0/libraries/index.html +++ b/0.8.0/libraries/index.html @@ -4,7 +4,7 @@ Client drivers | Skytable - + diff --git a/0.8.0/limits/index.html b/0.8.0/limits/index.html index 1b296086b..a6cea1ce2 100644 --- a/0.8.0/limits/index.html +++ b/0.8.0/limits/index.html @@ -4,7 +4,7 @@ Limits | Skytable - + diff --git a/0.8.0/protocol/errors/index.html b/0.8.0/protocol/errors/index.html index 6a9523732..eca91fa8b 100644 --- a/0.8.0/protocol/errors/index.html +++ b/0.8.0/protocol/errors/index.html @@ -4,7 +4,7 @@ Errors | Skytable - + diff --git a/0.8.0/protocol/networking/index.html b/0.8.0/protocol/networking/index.html index 2fd566fc4..94fc737b9 100644 --- a/0.8.0/protocol/networking/index.html +++ b/0.8.0/protocol/networking/index.html @@ -4,7 +4,7 @@ Networking | Skytable - + diff --git a/0.8.0/protocol/overview/index.html b/0.8.0/protocol/overview/index.html index de76129dc..f1170ebb1 100644 --- a/0.8.0/protocol/overview/index.html +++ b/0.8.0/protocol/overview/index.html @@ -4,7 +4,7 @@ Skyhash 2 — Protocol Overview | Skytable - + diff --git a/0.8.0/resources/migration/index.html b/0.8.0/resources/migration/index.html index b0439b73b..b94c70513 100644 --- a/0.8.0/resources/migration/index.html +++ b/0.8.0/resources/migration/index.html @@ -4,7 +4,7 @@ Migrating from an older release | Skytable - + diff --git a/0.8.0/resources/overview/index.html b/0.8.0/resources/overview/index.html index 1e3178c9d..2ab3de06c 100644 --- a/0.8.0/resources/overview/index.html +++ b/0.8.0/resources/overview/index.html @@ -4,7 +4,7 @@ Resources | Skytable - + diff --git a/0.8.0/system/administration/index.html b/0.8.0/system/administration/index.html index 3e0c044d9..9182efbb2 100644 --- a/0.8.0/system/administration/index.html +++ b/0.8.0/system/administration/index.html @@ -4,7 +4,7 @@ Administration | Skytable - + diff --git a/0.8.0/system/configuration/index.html b/0.8.0/system/configuration/index.html index 3bc6fee24..8ea65c753 100644 --- a/0.8.0/system/configuration/index.html +++ b/0.8.0/system/configuration/index.html @@ -4,7 +4,7 @@ Configuration | Skytable - + diff --git a/0.8.0/using-the-repl/index.html b/0.8.0/using-the-repl/index.html index 259b32944..d6a2f15ac 100644 --- a/0.8.0/using-the-repl/index.html +++ b/0.8.0/using-the-repl/index.html @@ -4,7 +4,7 @@ Using the REPL | Skytable - + diff --git a/0.8.1/architecture/index.html b/0.8.1/architecture/index.html index 7140a2ffd..c81377aef 100644 --- a/0.8.1/architecture/index.html +++ b/0.8.1/architecture/index.html @@ -4,7 +4,7 @@ Architecture | Skytable - + diff --git a/0.8.1/benchmarking/index.html b/0.8.1/benchmarking/index.html index 4f57fdbca..cdc86ef67 100644 --- a/0.8.1/benchmarking/index.html +++ b/0.8.1/benchmarking/index.html @@ -4,7 +4,7 @@ Benchmarking | Skytable - + diff --git a/0.8.1/blueql/dcl/index.html b/0.8.1/blueql/dcl/index.html index 8c5fdf908..ccb463300 100644 --- a/0.8.1/blueql/dcl/index.html +++ b/0.8.1/blueql/dcl/index.html @@ -4,7 +4,7 @@ DCL | Skytable - + diff --git a/0.8.1/blueql/ddl/index.html b/0.8.1/blueql/ddl/index.html index d62cbafbe..ac8c8396c 100644 --- a/0.8.1/blueql/ddl/index.html +++ b/0.8.1/blueql/ddl/index.html @@ -4,7 +4,7 @@ DDL | Skytable - + diff --git a/0.8.1/blueql/dml/index.html b/0.8.1/blueql/dml/index.html index d798260a2..10d8d7151 100644 --- a/0.8.1/blueql/dml/index.html +++ b/0.8.1/blueql/dml/index.html @@ -4,7 +4,7 @@ DML | Skytable - + diff --git a/0.8.1/blueql/index.html b/0.8.1/blueql/index.html index 172e91c14..fb0c2ec27 100644 --- a/0.8.1/blueql/index.html +++ b/0.8.1/blueql/index.html @@ -4,7 +4,7 @@ BlueQL | Skytable - + diff --git a/0.8.1/blueql/overview/index.html b/0.8.1/blueql/overview/index.html index b7f5f1b56..62c364b1b 100644 --- a/0.8.1/blueql/overview/index.html +++ b/0.8.1/blueql/overview/index.html @@ -4,7 +4,7 @@ Overview | Skytable - + diff --git a/0.8.1/deployment/index.html b/0.8.1/deployment/index.html index c2cb6d5a7..ac282ab59 100644 --- a/0.8.1/deployment/index.html +++ b/0.8.1/deployment/index.html @@ -4,7 +4,7 @@ Deployment | Skytable - + diff --git a/0.8.1/index.html b/0.8.1/index.html index 3b535fab9..3752cea62 100644 --- a/0.8.1/index.html +++ b/0.8.1/index.html @@ -4,7 +4,7 @@ Introduction | Skytable - + diff --git a/0.8.1/installation/index.html b/0.8.1/installation/index.html index 2a7bcfd6d..b4346bdce 100644 --- a/0.8.1/installation/index.html +++ b/0.8.1/installation/index.html @@ -4,7 +4,7 @@ Installation | Skytable - + diff --git a/0.8.1/libraries/index.html b/0.8.1/libraries/index.html index 220ea86c4..c867a8b7c 100644 --- a/0.8.1/libraries/index.html +++ b/0.8.1/libraries/index.html @@ -4,7 +4,7 @@ Client drivers | Skytable - + diff --git a/0.8.1/limits/index.html b/0.8.1/limits/index.html index ca21bbd65..56ae15a95 100644 --- a/0.8.1/limits/index.html +++ b/0.8.1/limits/index.html @@ -4,7 +4,7 @@ Limits | Skytable - + diff --git a/0.8.1/protocol/errors/index.html b/0.8.1/protocol/errors/index.html index ec8990d45..65550ad8c 100644 --- a/0.8.1/protocol/errors/index.html +++ b/0.8.1/protocol/errors/index.html @@ -4,7 +4,7 @@ Error Index | Skytable - + diff --git a/0.8.1/protocol/index.html b/0.8.1/protocol/index.html index 53d9f4c73..af848194c 100644 --- a/0.8.1/protocol/index.html +++ b/0.8.1/protocol/index.html @@ -4,7 +4,7 @@ Skyhash 2: Overview | Skytable - + diff --git a/0.8.1/protocol/specification/index.html b/0.8.1/protocol/specification/index.html index b708c66ed..427d06f48 100644 --- a/0.8.1/protocol/specification/index.html +++ b/0.8.1/protocol/specification/index.html @@ -4,7 +4,7 @@ Specification | Skytable - + diff --git a/0.8.1/querying/index.html b/0.8.1/querying/index.html index bd15e459c..09a32a108 100644 --- a/0.8.1/querying/index.html +++ b/0.8.1/querying/index.html @@ -4,7 +4,7 @@ Querying | Skytable - + diff --git a/0.8.1/resources/migration/index.html b/0.8.1/resources/migration/index.html index a6a8ea64d..765f8afb4 100644 --- a/0.8.1/resources/migration/index.html +++ b/0.8.1/resources/migration/index.html @@ -4,7 +4,7 @@ Migrating from an older release | Skytable - + diff --git a/0.8.1/resources/platform-support/index.html b/0.8.1/resources/platform-support/index.html index bd70fe057..ea39d7180 100644 --- a/0.8.1/resources/platform-support/index.html +++ b/0.8.1/resources/platform-support/index.html @@ -4,7 +4,7 @@ Platform Support | Skytable - + diff --git a/0.8.1/resources/useful-links/index.html b/0.8.1/resources/useful-links/index.html index 6cf285f55..ac70a4bb6 100644 --- a/0.8.1/resources/useful-links/index.html +++ b/0.8.1/resources/useful-links/index.html @@ -4,7 +4,7 @@ Useful links | Skytable - + diff --git a/0.8.1/system/configuration/index.html b/0.8.1/system/configuration/index.html index eeec57221..2d3f92c58 100644 --- a/0.8.1/system/configuration/index.html +++ b/0.8.1/system/configuration/index.html @@ -4,7 +4,7 @@ Configuration | Skytable - + diff --git a/0.8.1/system/global-management/index.html b/0.8.1/system/global-management/index.html index e8955542e..6284adc40 100644 --- a/0.8.1/system/global-management/index.html +++ b/0.8.1/system/global-management/index.html @@ -4,7 +4,7 @@ Global management | Skytable - + diff --git a/0.8.1/system/index.html b/0.8.1/system/index.html index 9cd296bda..ebdacbdac 100644 --- a/0.8.1/system/index.html +++ b/0.8.1/system/index.html @@ -4,7 +4,7 @@ System administration | Skytable - + diff --git a/0.8.1/system/recovery/index.html b/0.8.1/system/recovery/index.html index ce4deb51e..c3a0176c1 100644 --- a/0.8.1/system/recovery/index.html +++ b/0.8.1/system/recovery/index.html @@ -4,7 +4,7 @@ Recovery | Skytable - + diff --git a/0.8.1/system/user-management/index.html b/0.8.1/system/user-management/index.html index e619495c8..b4ffa6eaa 100644 --- a/0.8.1/system/user-management/index.html +++ b/0.8.1/system/user-management/index.html @@ -4,7 +4,7 @@ User management | Skytable - + diff --git a/0.8.1/using-the-repl/index.html b/0.8.1/using-the-repl/index.html index 59d920bf2..e25b30e41 100644 --- a/0.8.1/using-the-repl/index.html +++ b/0.8.1/using-the-repl/index.html @@ -4,7 +4,7 @@ Using the REPL | Skytable - + diff --git a/0.8.1/versions/index.html b/0.8.1/versions/index.html index 44d079e05..3bb48729b 100644 --- a/0.8.1/versions/index.html +++ b/0.8.1/versions/index.html @@ -4,7 +4,7 @@ All versions | Skytable - + diff --git a/0.8.2/architecture/index.html b/0.8.2/architecture/index.html index 8c9081bf1..c6cae984d 100644 --- a/0.8.2/architecture/index.html +++ b/0.8.2/architecture/index.html @@ -4,7 +4,7 @@ Architecture | Skytable - + diff --git a/0.8.2/benchmarking/index.html b/0.8.2/benchmarking/index.html index b04e88bfc..254df6faf 100644 --- a/0.8.2/benchmarking/index.html +++ b/0.8.2/benchmarking/index.html @@ -4,7 +4,7 @@ Benchmarking | Skytable - + diff --git a/0.8.2/blueql/dcl/index.html b/0.8.2/blueql/dcl/index.html index 6f61bad4f..d3b1f4bc8 100644 --- a/0.8.2/blueql/dcl/index.html +++ b/0.8.2/blueql/dcl/index.html @@ -4,7 +4,7 @@ DCL | Skytable - + diff --git a/0.8.2/blueql/ddl/index.html b/0.8.2/blueql/ddl/index.html index f40c9a7a9..638af0b57 100644 --- a/0.8.2/blueql/ddl/index.html +++ b/0.8.2/blueql/ddl/index.html @@ -4,7 +4,7 @@ DDL | Skytable - + diff --git a/0.8.2/blueql/dml/index.html b/0.8.2/blueql/dml/index.html index 00fe19066..99f5d0879 100644 --- a/0.8.2/blueql/dml/index.html +++ b/0.8.2/blueql/dml/index.html @@ -4,7 +4,7 @@ DML | Skytable - + diff --git a/0.8.2/blueql/index.html b/0.8.2/blueql/index.html index dbd92f96d..74a2ceda7 100644 --- a/0.8.2/blueql/index.html +++ b/0.8.2/blueql/index.html @@ -4,7 +4,7 @@ BlueQL | Skytable - + diff --git a/0.8.2/blueql/overview/index.html b/0.8.2/blueql/overview/index.html index c3eeae65e..e01abcda2 100644 --- a/0.8.2/blueql/overview/index.html +++ b/0.8.2/blueql/overview/index.html @@ -4,7 +4,7 @@ Overview | Skytable - + diff --git a/0.8.2/deployment/index.html b/0.8.2/deployment/index.html index 04b8d956a..bfb518024 100644 --- a/0.8.2/deployment/index.html +++ b/0.8.2/deployment/index.html @@ -4,7 +4,7 @@ Deployment | Skytable - + diff --git a/0.8.2/index.html b/0.8.2/index.html index 555edfcab..522274104 100644 --- a/0.8.2/index.html +++ b/0.8.2/index.html @@ -4,7 +4,7 @@ Introduction | Skytable - + diff --git a/0.8.2/installation/index.html b/0.8.2/installation/index.html index c2fe8434e..5f19e8feb 100644 --- a/0.8.2/installation/index.html +++ b/0.8.2/installation/index.html @@ -4,7 +4,7 @@ Installation | Skytable - + diff --git a/0.8.2/libraries/index.html b/0.8.2/libraries/index.html index 02b747b3f..03d10e37a 100644 --- a/0.8.2/libraries/index.html +++ b/0.8.2/libraries/index.html @@ -4,7 +4,7 @@ Client drivers | Skytable - + diff --git a/0.8.2/limits/index.html b/0.8.2/limits/index.html index d5e093bd7..020e7c4e5 100644 --- a/0.8.2/limits/index.html +++ b/0.8.2/limits/index.html @@ -4,7 +4,7 @@ Limits | Skytable - + diff --git a/0.8.2/protocol/errors/index.html b/0.8.2/protocol/errors/index.html index 3087ef404..fa5e71500 100644 --- a/0.8.2/protocol/errors/index.html +++ b/0.8.2/protocol/errors/index.html @@ -4,7 +4,7 @@ Error Index | Skytable - + diff --git a/0.8.2/protocol/index.html b/0.8.2/protocol/index.html index 5da513458..f26d06618 100644 --- a/0.8.2/protocol/index.html +++ b/0.8.2/protocol/index.html @@ -4,7 +4,7 @@ Skyhash 2: Overview | Skytable - + diff --git a/0.8.2/protocol/specification/index.html b/0.8.2/protocol/specification/index.html index 8be3ca513..ef9f91e17 100644 --- a/0.8.2/protocol/specification/index.html +++ b/0.8.2/protocol/specification/index.html @@ -4,7 +4,7 @@ Specification | Skytable - + diff --git a/0.8.2/querying/index.html b/0.8.2/querying/index.html index ccd3a0f4a..bd1deb5d3 100644 --- a/0.8.2/querying/index.html +++ b/0.8.2/querying/index.html @@ -4,7 +4,7 @@ Querying | Skytable - + diff --git a/0.8.2/resources/migration/index.html b/0.8.2/resources/migration/index.html index 22ab629a2..5735f606e 100644 --- a/0.8.2/resources/migration/index.html +++ b/0.8.2/resources/migration/index.html @@ -4,7 +4,7 @@ Migrating from an older release | Skytable - + diff --git a/0.8.2/resources/platform-support/index.html b/0.8.2/resources/platform-support/index.html index 868a0868d..d1bb0aec4 100644 --- a/0.8.2/resources/platform-support/index.html +++ b/0.8.2/resources/platform-support/index.html @@ -4,7 +4,7 @@ Platform Support | Skytable - + diff --git a/0.8.2/resources/useful-links/index.html b/0.8.2/resources/useful-links/index.html index 6c5c429c5..7ed3456ca 100644 --- a/0.8.2/resources/useful-links/index.html +++ b/0.8.2/resources/useful-links/index.html @@ -4,7 +4,7 @@ Useful links | Skytable - + diff --git a/0.8.2/system/configuration/index.html b/0.8.2/system/configuration/index.html index a7ce09050..6583ae473 100644 --- a/0.8.2/system/configuration/index.html +++ b/0.8.2/system/configuration/index.html @@ -4,7 +4,7 @@ Configuration | Skytable - + diff --git a/0.8.2/system/global-management/index.html b/0.8.2/system/global-management/index.html index 7cb144ad1..bbbd607f5 100644 --- a/0.8.2/system/global-management/index.html +++ b/0.8.2/system/global-management/index.html @@ -4,7 +4,7 @@ Global management | Skytable - + diff --git a/0.8.2/system/index.html b/0.8.2/system/index.html index fce32d020..c8d912499 100644 --- a/0.8.2/system/index.html +++ b/0.8.2/system/index.html @@ -4,7 +4,7 @@ System administration | Skytable - + diff --git a/0.8.2/system/operations/index.html b/0.8.2/system/operations/index.html index 7cffd2fae..7405c9241 100644 --- a/0.8.2/system/operations/index.html +++ b/0.8.2/system/operations/index.html @@ -4,7 +4,7 @@ Operations | Skytable - + diff --git a/0.8.2/system/user-management/index.html b/0.8.2/system/user-management/index.html index 0e7ec1f79..f3a2d3148 100644 --- a/0.8.2/system/user-management/index.html +++ b/0.8.2/system/user-management/index.html @@ -4,7 +4,7 @@ User management | Skytable - + diff --git a/0.8.2/using-the-repl/index.html b/0.8.2/using-the-repl/index.html index 3d8a6930b..68322dbcf 100644 --- a/0.8.2/using-the-repl/index.html +++ b/0.8.2/using-the-repl/index.html @@ -4,7 +4,7 @@ Using the REPL | Skytable - + diff --git a/0.8.2/versions/index.html b/0.8.2/versions/index.html index 707755ee7..3fcac237c 100644 --- a/0.8.2/versions/index.html +++ b/0.8.2/versions/index.html @@ -4,7 +4,7 @@ All versions | Skytable - + diff --git a/0.8.3/architecture/index.html b/0.8.3/architecture/index.html index 99f6a412e..5c3c8ecb5 100644 --- a/0.8.3/architecture/index.html +++ b/0.8.3/architecture/index.html @@ -4,7 +4,7 @@ Architecture | Skytable - + diff --git a/0.8.3/benchmarking/index.html b/0.8.3/benchmarking/index.html index 8f3934b8b..bfc013a9f 100644 --- a/0.8.3/benchmarking/index.html +++ b/0.8.3/benchmarking/index.html @@ -4,7 +4,7 @@ Benchmarking | Skytable - + diff --git a/0.8.3/blueql/dcl/index.html b/0.8.3/blueql/dcl/index.html index 0f9960fb7..aabf24ecd 100644 --- a/0.8.3/blueql/dcl/index.html +++ b/0.8.3/blueql/dcl/index.html @@ -4,7 +4,7 @@ DCL | Skytable - + diff --git a/0.8.3/blueql/ddl/index.html b/0.8.3/blueql/ddl/index.html index 14121ab5d..067e32bd9 100644 --- a/0.8.3/blueql/ddl/index.html +++ b/0.8.3/blueql/ddl/index.html @@ -4,7 +4,7 @@ DDL | Skytable - + diff --git a/0.8.3/blueql/dml/index.html b/0.8.3/blueql/dml/index.html index c547329fc..d109741ee 100644 --- a/0.8.3/blueql/dml/index.html +++ b/0.8.3/blueql/dml/index.html @@ -4,7 +4,7 @@ DML | Skytable - + diff --git a/0.8.3/blueql/index.html b/0.8.3/blueql/index.html index 3b2344b12..1bb716f12 100644 --- a/0.8.3/blueql/index.html +++ b/0.8.3/blueql/index.html @@ -4,7 +4,7 @@ BlueQL | Skytable - + diff --git a/0.8.3/blueql/overview/index.html b/0.8.3/blueql/overview/index.html index 39047344c..87d1ae6bf 100644 --- a/0.8.3/blueql/overview/index.html +++ b/0.8.3/blueql/overview/index.html @@ -4,7 +4,7 @@ Overview | Skytable - + diff --git a/0.8.3/deployment/index.html b/0.8.3/deployment/index.html index 064fcde76..c449de0db 100644 --- a/0.8.3/deployment/index.html +++ b/0.8.3/deployment/index.html @@ -4,7 +4,7 @@ Deployment | Skytable - + diff --git a/0.8.3/index.html b/0.8.3/index.html index 82eec1b7b..47fffdba7 100644 --- a/0.8.3/index.html +++ b/0.8.3/index.html @@ -4,7 +4,7 @@ Introduction | Skytable - + diff --git a/0.8.3/installation/index.html b/0.8.3/installation/index.html index 5bb510738..df34e7266 100644 --- a/0.8.3/installation/index.html +++ b/0.8.3/installation/index.html @@ -4,7 +4,7 @@ Installation | Skytable - + diff --git a/0.8.3/libraries/index.html b/0.8.3/libraries/index.html index d53fa8612..d0dc45898 100644 --- a/0.8.3/libraries/index.html +++ b/0.8.3/libraries/index.html @@ -4,7 +4,7 @@ Client drivers | Skytable - + diff --git a/0.8.3/limits/index.html b/0.8.3/limits/index.html index 4a33800e8..09ccbca6e 100644 --- a/0.8.3/limits/index.html +++ b/0.8.3/limits/index.html @@ -4,7 +4,7 @@ Limits | Skytable - + diff --git a/0.8.3/protocol/errors/index.html b/0.8.3/protocol/errors/index.html index 1a3e6d854..383c10481 100644 --- a/0.8.3/protocol/errors/index.html +++ b/0.8.3/protocol/errors/index.html @@ -4,7 +4,7 @@ Error Index | Skytable - + diff --git a/0.8.3/protocol/index.html b/0.8.3/protocol/index.html index 58bf18488..7d205808c 100644 --- a/0.8.3/protocol/index.html +++ b/0.8.3/protocol/index.html @@ -4,7 +4,7 @@ Skyhash 2: Overview | Skytable - + diff --git a/0.8.3/protocol/specification/index.html b/0.8.3/protocol/specification/index.html index 954e714d8..057e84bb7 100644 --- a/0.8.3/protocol/specification/index.html +++ b/0.8.3/protocol/specification/index.html @@ -4,7 +4,7 @@ Specification | Skytable - + diff --git a/0.8.3/querying/index.html b/0.8.3/querying/index.html index 599d50247..ec41ae56f 100644 --- a/0.8.3/querying/index.html +++ b/0.8.3/querying/index.html @@ -4,7 +4,7 @@ Querying | Skytable - + diff --git a/0.8.3/resources/migration/index.html b/0.8.3/resources/migration/index.html index d27d37e3d..0afcde63f 100644 --- a/0.8.3/resources/migration/index.html +++ b/0.8.3/resources/migration/index.html @@ -4,7 +4,7 @@ Migrating from an older release | Skytable - + diff --git a/0.8.3/resources/platform-support/index.html b/0.8.3/resources/platform-support/index.html index 1ce0c94c7..463ba6996 100644 --- a/0.8.3/resources/platform-support/index.html +++ b/0.8.3/resources/platform-support/index.html @@ -4,7 +4,7 @@ Platform Support | Skytable - + diff --git a/0.8.3/resources/useful-links/index.html b/0.8.3/resources/useful-links/index.html index 68ba3414f..83fd6acd6 100644 --- a/0.8.3/resources/useful-links/index.html +++ b/0.8.3/resources/useful-links/index.html @@ -4,7 +4,7 @@ Useful links | Skytable - + diff --git a/0.8.3/system/backup-and-restore/index.html b/0.8.3/system/backup-and-restore/index.html index 7453890da..85f8e6875 100644 --- a/0.8.3/system/backup-and-restore/index.html +++ b/0.8.3/system/backup-and-restore/index.html @@ -4,7 +4,7 @@ Backup and restore | Skytable - + diff --git a/0.8.3/system/configuration/index.html b/0.8.3/system/configuration/index.html index 4392cff8c..3c4066728 100644 --- a/0.8.3/system/configuration/index.html +++ b/0.8.3/system/configuration/index.html @@ -4,7 +4,7 @@ Configuration | Skytable - + diff --git a/0.8.3/system/disk-usage/index.html b/0.8.3/system/disk-usage/index.html index 5ee3d416b..2ec0c9a22 100644 --- a/0.8.3/system/disk-usage/index.html +++ b/0.8.3/system/disk-usage/index.html @@ -4,7 +4,7 @@ Disk usage | Skytable - + diff --git a/0.8.3/system/global-management/index.html b/0.8.3/system/global-management/index.html index 8200826c7..37207feb1 100644 --- a/0.8.3/system/global-management/index.html +++ b/0.8.3/system/global-management/index.html @@ -4,7 +4,7 @@ Global management | Skytable - + diff --git a/0.8.3/system/index.html b/0.8.3/system/index.html index bb6cde926..eae6fe92e 100644 --- a/0.8.3/system/index.html +++ b/0.8.3/system/index.html @@ -4,7 +4,7 @@ System administration | Skytable - + diff --git a/0.8.3/system/recovery/index.html b/0.8.3/system/recovery/index.html index e7f64c063..7e14f1843 100644 --- a/0.8.3/system/recovery/index.html +++ b/0.8.3/system/recovery/index.html @@ -4,7 +4,7 @@ Data recovery | Skytable - + diff --git a/0.8.3/system/user-management/index.html b/0.8.3/system/user-management/index.html index 2e117d864..f3dea0bbc 100644 --- a/0.8.3/system/user-management/index.html +++ b/0.8.3/system/user-management/index.html @@ -4,7 +4,7 @@ User management | Skytable - + diff --git a/0.8.3/using-the-repl/index.html b/0.8.3/using-the-repl/index.html index 2d5487ef3..306597981 100644 --- a/0.8.3/using-the-repl/index.html +++ b/0.8.3/using-the-repl/index.html @@ -4,7 +4,7 @@ Using the REPL | Skytable - + diff --git a/0.8.3/versions/index.html b/0.8.3/versions/index.html index 6d75a69fc..62ca5e092 100644 --- a/0.8.3/versions/index.html +++ b/0.8.3/versions/index.html @@ -4,7 +4,7 @@ All versions | Skytable - + diff --git a/404.html b/404.html index 3a3c67079..f538fd5e4 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ Skytable - + diff --git a/architecture/index.html b/architecture/index.html index 61f739953..b81207e31 100644 --- a/architecture/index.html +++ b/architecture/index.html @@ -4,7 +4,7 @@ Architecture | Skytable - + @@ -73,7 +73,7 @@

Storage
Features on track

At this point, Skytable is primarily in-memory which means that while it uses disk storage for durability, most data is stored in-memory. This is going to change in the near future as the team is working on building a custom log-based engine. As you might understand, this is not an everyday task and as we incorporate new ideas it will take some time. But if you're seeing this in 2023, you can expect us to ship something by Q2 2024.

+
Features on track

At this point, Skytable is primarily in-memory which means that while it uses disk storage for durability, most data is stored in-memory. This is going to change in the near future as the team is working on building a custom log-based engine. As you might understand, this is not an everyday task and as we incorporate new ideas it will take some time. But if you're seeing this in 2024, you can expect us to ship something by early 2025.

DDL and DCL transactions use a log-based append-only driver while DML queries use a custom log-based append-only driver that is able to intelligently handle concurrent changes. The team will implement new and updated storage drivers from time to time but you do not have to worry about anything, due to our promise for backwards compatibility (see below).

Scalability

Skytable is heavily multithreaded enabling incredible vertical scalability and you can witness it for yourself by running benchmarks (or looking at ones that we publish). Clustering and replication are on track to be released soon.

diff --git a/assets/js/e82058ca.5eb66d5a.js b/assets/js/e82058ca.5eb66d5a.js deleted file mode 100644 index efc2fd489..000000000 --- a/assets/js/e82058ca.5eb66d5a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2893],{1675:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>o});var l=s(4848),r=s(8453);const i={id:"ddl",title:"DDL"},d=void 0,c={id:"blueql/ddl",title:"DDL",description:"DDL short for Data Definition Language is used to create, alter and drop DDL objects such as spaces and models.",source:"@site/docs/blueql/2.ddl.md",sourceDirName:"blueql",slug:"/blueql/ddl",permalink:"/blueql/ddl",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{id:"ddl",title:"DDL"},sidebar:"docs",previous:{title:"Overview",permalink:"/blueql/overview"},next:{title:"DML",permalink:"/blueql/dml"}},t={},o=[{value:"Generic",id:"generic",level:2},{value:"USE",id:"use",level:3},{value:"INSPECT",id:"inspect",level:3},{value:"Space",id:"space",level:2},{value:"CREATE SPACE",id:"create-space",level:3},{value:"Examples",id:"examples",level:4},{value:"ALTER SPACE",id:"alter-space",level:3},{value:"Examples",id:"examples-1",level:4},{value:"DROP SPACE",id:"drop-space",level:3},{value:"Examples",id:"examples-2",level:4},{value:"Models",id:"models",level:2},{value:"Type definitions",id:"type-definitions",level:3},{value:"CREATE MODEL",id:"create-model",level:3},{value:"Examples",id:"examples-3",level:4},{value:"ALTER MODEL ADD",id:"alter-model-add",level:3},{value:"Examples",id:"examples-4",level:4},{value:"ALTER MODEL UPDATE",id:"alter-model-update",level:3},{value:"Examples",id:"examples-5",level:4},{value:"ALTER MODEL REMOVE",id:"alter-model-remove",level:3},{value:"Examples",id:"examples-6",level:4},{value:"DROP MODEL",id:"drop-model",level:3},{value:"Examples",id:"examples-7",level:4},{value:"TRUNCATE MODEL",id:"truncate-model",level:3},{value:"Examples",id:"examples-8",level:4}];function a(e){const n={admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(n.p,{children:["DDL short for Data Definition Language is used to create, alter and drop DDL objects such as ",(0,l.jsx)(n.code,{children:"space"}),"s and ",(0,l.jsx)(n.code,{children:"model"}),"s."]}),"\n",(0,l.jsx)(n.h2,{id:"generic",children:"Generic"}),"\n",(0,l.jsx)(n.h3,{id:"use",children:"USE"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"USE "}),": sets the space that will be used for all other queries"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"USE null"}),": unsets the space"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"USE $current"}),": returns the name of the space currently set ",(0,l.jsx)(n.strong,{children:"if it still exists"})," or otherwise returns an error"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": any"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsxs)(n.admonition,{type:"tip",children:[(0,l.jsxs)(n.mdxAdmonitionTitle,{children:["DDL actions don't respect ",(0,l.jsx)(n.code,{children:"USE"})]}),(0,l.jsx)(n.p,{children:"This is so that you're specific about what DDL object you want to manipulate."}),(0,l.jsxs)(n.p,{children:["Exception: ",(0,l.jsx)(n.code,{children:"INSPECT"})," queries will respect the currently set ",(0,l.jsx)(n.code,{children:"SPACE"})," if required."]})]}),"\n",(0,l.jsx)(n.h3,{id:"inspect",children:"INSPECT"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"INSPECT GLOBAL"}),": returns a JSON with a list of all spaces, users and other information. For example:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{"spaces":["space1"],"users":["root"],"settings":{}}\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"INSPECT SPACE "}),": returns a JSON with a list of all models in the space and other information, For example:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{"models":["model1"],"properties":{}}\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"INSPECT MODEL ."}),": returns a JSON with information about the model such as the declaration, row count and such:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{"decl":"{*username: string, !password: string, ?notes: [string]}","size":12345678,"properties":{}}\n'})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": any"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": string or error"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"space",children:"Space"}),"\n",(0,l.jsx)(n.h3,{id:"create-space",children:"CREATE SPACE"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"-- without any properties\nCREATE SPACE [IF NOT EXISTS] \n-- with properties\nCREATE SPACE [IF NOT EXISTS] WITH { property_name: property_value }\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Properties"}),": None"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n",(0,l.jsxs)(n.li,{children:["when used with ",(0,l.jsx)(n.code,{children:"if not exists"}),": bool indicating whether the space was actually created or not (false indicates that it was already present and hence not created)"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"CREATE SPACE apps\nCREATE SPACE IF NOT EXISTS apps\n"})}),"\n",(0,l.jsx)(n.h3,{id:"alter-space",children:"ALTER SPACE"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER SPACE WITH { property_name: property_value }\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Properties"}),": None"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-1",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER SPACE apps WITH { new_cache_value: 1234 }\n"})}),"\n",(0,l.jsx)(n.h3,{id:"drop-space",children:"DROP SPACE"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP SPACE [IF EXISTS] [ALLOW NOT EMPTY] \n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"A non-empty space cannot be dropped"}),"\nTo avoid catastrophic ",(0,l.jsx)(n.code,{children:"DROP"}),"s, a ",(0,l.jsx)(n.code,{children:"SPACE"})," can only be dropped directly if it is non-empty. To drop a non-empty space, you must\nrun:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP SPACE ALLOW NOT EMPTY \n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n",(0,l.jsxs)(n.li,{children:["when used with ",(0,l.jsx)(n.code,{children:"if exists"}),": bool indicating whether the space was actually present or not"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-2",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP SPACE myspace\nDROP SPACE ALLOW NOT EMPTY myspace\n"})}),"\n",(0,l.jsx)(n.h2,{id:"models",children:"Models"}),"\n",(0,l.jsx)(n.h3,{id:"type-definitions",children:"Type definitions"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"When used in create"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A simple type"}),": ",(0,l.jsx)(n.code,{children:"field_name: string"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A list"}),": ",(0,l.jsx)(n.code,{children:"field_name: list {type: string}"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A nested list"}),": ",(0,l.jsx)(n.code,{children:"field_name: list{type: string}"})]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"When used in alter"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A simple type"}),": ",(0,l.jsx)(n.code,{children:"field_name { type: string }"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A list"}),": ",(0,l.jsx)(n.code,{children:"field_name { type: list {type: string} }"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A nested list"}),": ",(0,l.jsx)(n.code,{children:"field_name {type: list{type:list{type:string}}}"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"create-model",children:"CREATE MODEL"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"CREATE MODEL [IF NOT EXISTS] .([primary] [null] field_name: field_type) [ WITH {property_name: property_value} ]\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Properties"}),": None"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["The ",(0,l.jsx)(n.strong,{children:"first field specified automatically becomes the primary key"})]}),"\n",(0,l.jsxs)(n.li,{children:["All ",(0,l.jsx)(n.strong,{children:"fields are not nullable by default"})]}),"\n",(0,l.jsxs)(n.li,{children:["To make a field nullable add the ",(0,l.jsx)(n.code,{children:"null"})," keyword before the field name"]}),"\n",(0,l.jsxs)(n.li,{children:["If you do not want the first field to become the primary key, then you must add the ",(0,l.jsx)(n.code,{children:"primary"})," keyword before the field that you want to use as the primary key"]}),"\n",(0,l.jsxs)(n.li,{children:["The field order is preserved. When doing an ",(0,l.jsx)(n.code,{children:"INSERT"})," you will have to supply values in the same order"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n",(0,l.jsxs)(n.li,{children:["when used with ",(0,l.jsx)(n.code,{children:"if not exists"}),": bool indicating whether the model was actually created or not (false indicates that it was already present and hence not created)"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-3",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"CREATE MODEL myspace.mymodel(username: string, password: string, null email_id: string, notes: list { type: string })\nCREATE MODEL IF NOT EXISTS myspace.mymodel(username: string, password: string, null email_id: string, notes: list { type: string })\n"})}),"\n",(0,l.jsx)(n.h3,{id:"alter-model-add",children:"ALTER MODEL ADD"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"-- add a single field\nALTER MODEL . ADD one_field { type: string }\n-- add multiple fields\nALTER MODEL . ADD (\n first_field { type: string },\n second_field { type: binary },\n)\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-4",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER MODEL myspace.mymodel ADD one_field { type: list { type: string } }\nALTER MODEL myspace.mymodel ADD (\n email_id: {\n type: string,\n nullable: true,\n },\n phone_number: {\n type: uint64,\n nullable: true,\n },\n)\n"})}),"\n",(0,l.jsx)(n.h3,{id:"alter-model-update",children:"ALTER MODEL UPDATE"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"-- update one field\nALTER MODEL . UPDATE one_field { type: string }\n-- update multiple fields\nALTER MODEL . UPDATE (\n first_field { type: string },\n second_field { type: binary },\n)\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"The primary key field cannot be modified"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-5",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER MODEL myspace.mymodel UPDATE my_int_field { type: uint64 }\nALTER MODEL myspace.mymodel UPDATE (\n my_int_field { type: uint64 },\n my_float_field { type: float64 }\n)\n"})}),"\n",(0,l.jsx)(n.h3,{id:"alter-model-remove",children:"ALTER MODEL REMOVE"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"-- remove one field\nALTER MODEL . REMOVE one_field\n-- remove multiple fields\nALTER MODEL . REMOVE (first_field, second_field, ...)\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"The primary key field cannot be removed (as is expected)"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-6",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER MODEL myspace.mymodel REMOVE useless_field\nALTER MODEL myspace.mymodel REMOVE (useless_field_1, useless_field2)\n"})}),"\n",(0,l.jsx)(n.h3,{id:"drop-model",children:"DROP MODEL"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP MODEL [IF EXISTS] [ALLOW NOT EMPTY] .\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Operational notes"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Non-empty models cannot be dropped"})," to avoid catastrophic drops"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"To drop a non-empty model"}),": you must run:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP MODEL ALLOW NOT EMPTY .\n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n",(0,l.jsxs)(n.li,{children:["when used with ",(0,l.jsx)(n.code,{children:"if exists"}),": bool indicating whether the model was actually present or not"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-7",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP MODEL myspace.mymodel\nDROP ALLOW NOT EMPTY myspace.mymodel\n"})}),"\n",(0,l.jsx)(n.h3,{id:"truncate-model",children:"TRUNCATE MODEL"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"TRUNCATE MODEL .\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Blocking"}),"\n",(0,l.jsx)(n.li,{children:"Blocks all DML queries until completion of execution"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-8",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"TRUNCATE MODEL myspace.mymodel\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(a,{...e})}):a(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>c});var l=s(6540);const r={},i=l.createContext(r);function d(e){const n=l.useContext(i);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),l.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e82058ca.eedc3c6a.js b/assets/js/e82058ca.eedc3c6a.js new file mode 100644 index 000000000..dfcd6e2a1 --- /dev/null +++ b/assets/js/e82058ca.eedc3c6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2893],{1675:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>o});var l=s(4848),r=s(8453);const i={id:"ddl",title:"DDL"},d=void 0,c={id:"blueql/ddl",title:"DDL",description:"DDL short for Data Definition Language is used to create, alter and drop DDL objects such as spaces and models.",source:"@site/docs/blueql/2.ddl.md",sourceDirName:"blueql",slug:"/blueql/ddl",permalink:"/blueql/ddl",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{id:"ddl",title:"DDL"},sidebar:"docs",previous:{title:"Overview",permalink:"/blueql/overview"},next:{title:"DML",permalink:"/blueql/dml"}},t={},o=[{value:"Generic",id:"generic",level:2},{value:"USE",id:"use",level:3},{value:"INSPECT",id:"inspect",level:3},{value:"Space",id:"space",level:2},{value:"CREATE SPACE",id:"create-space",level:3},{value:"Examples",id:"examples",level:4},{value:"ALTER SPACE",id:"alter-space",level:3},{value:"Examples",id:"examples-1",level:4},{value:"DROP SPACE",id:"drop-space",level:3},{value:"Examples",id:"examples-2",level:4},{value:"Models",id:"models",level:2},{value:"Type definitions",id:"type-definitions",level:3},{value:"CREATE MODEL",id:"create-model",level:3},{value:"Examples",id:"examples-3",level:4},{value:"ALTER MODEL ADD",id:"alter-model-add",level:3},{value:"Examples",id:"examples-4",level:4},{value:"ALTER MODEL UPDATE",id:"alter-model-update",level:3},{value:"Examples",id:"examples-5",level:4},{value:"ALTER MODEL REMOVE",id:"alter-model-remove",level:3},{value:"Examples",id:"examples-6",level:4},{value:"DROP MODEL",id:"drop-model",level:3},{value:"Examples",id:"examples-7",level:4},{value:"TRUNCATE MODEL",id:"truncate-model",level:3},{value:"Examples",id:"examples-8",level:4}];function a(e){const n={admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(n.p,{children:["DDL short for Data Definition Language is used to create, alter and drop DDL objects such as ",(0,l.jsx)(n.code,{children:"space"}),"s and ",(0,l.jsx)(n.code,{children:"model"}),"s."]}),"\n",(0,l.jsx)(n.h2,{id:"generic",children:"Generic"}),"\n",(0,l.jsx)(n.h3,{id:"use",children:"USE"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"USE "}),": sets the space that will be used for all other queries"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"USE null"}),": unsets the space"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"USE $current"}),": returns the name of the space currently set ",(0,l.jsx)(n.strong,{children:"if it still exists"})," or otherwise returns an error"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": any"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsxs)(n.admonition,{type:"tip",children:[(0,l.jsxs)(n.mdxAdmonitionTitle,{children:["DDL actions don't respect ",(0,l.jsx)(n.code,{children:"USE"})]}),(0,l.jsx)(n.p,{children:"This is so that you're specific about what DDL object you want to manipulate."}),(0,l.jsxs)(n.p,{children:["Exception: ",(0,l.jsx)(n.code,{children:"INSPECT"})," queries will respect the currently set ",(0,l.jsx)(n.code,{children:"SPACE"})," if required."]})]}),"\n",(0,l.jsx)(n.h3,{id:"inspect",children:"INSPECT"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"INSPECT GLOBAL"}),": returns a JSON with a list of all spaces, users and other information. For example:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{"spaces":["space1"],"users":["root"],"settings":{}}\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"INSPECT SPACE "}),": returns a JSON with a list of all models in the space and other information, For example:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{"models":["model1"],"properties":{}}\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"INSPECT MODEL ."}),": returns a JSON with information about the model such as the declaration, row count and such:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{"decl":"{*username: string, !password: string, ?notes: [string]}","size":12345678,"properties":{}}\n'})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": any"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": string or error"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"space",children:"Space"}),"\n",(0,l.jsx)(n.h3,{id:"create-space",children:"CREATE SPACE"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"-- without any properties\nCREATE SPACE [IF NOT EXISTS] \n-- with properties\nCREATE SPACE [IF NOT EXISTS] WITH { property_name: property_value }\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Properties"}),": None"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n",(0,l.jsxs)(n.li,{children:["when used with ",(0,l.jsx)(n.code,{children:"if not exists"}),": bool indicating whether the space was actually created or not (false indicates that it was already present and hence not created)"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"CREATE SPACE apps\nCREATE SPACE IF NOT EXISTS apps\n"})}),"\n",(0,l.jsx)(n.h3,{id:"alter-space",children:"ALTER SPACE"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER SPACE WITH { property_name: property_value }\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Properties"}),": None"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-1",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER SPACE apps WITH { new_cache_value: 1234 }\n"})}),"\n",(0,l.jsx)(n.h3,{id:"drop-space",children:"DROP SPACE"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP SPACE [IF EXISTS] [ALLOW NOT EMPTY] \n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"A non-empty space cannot be dropped"}),"\nTo avoid catastrophic ",(0,l.jsx)(n.code,{children:"DROP"}),"s, a ",(0,l.jsx)(n.code,{children:"SPACE"})," can only be dropped directly if it is empty. To drop a non-empty space, you must\nrun:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP SPACE ALLOW NOT EMPTY \n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n",(0,l.jsxs)(n.li,{children:["when used with ",(0,l.jsx)(n.code,{children:"if exists"}),": bool indicating whether the space was actually present or not"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-2",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP SPACE myspace\nDROP SPACE ALLOW NOT EMPTY myspace\n"})}),"\n",(0,l.jsx)(n.h2,{id:"models",children:"Models"}),"\n",(0,l.jsx)(n.h3,{id:"type-definitions",children:"Type definitions"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"When used in create"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A simple type"}),": ",(0,l.jsx)(n.code,{children:"field_name: string"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A list"}),": ",(0,l.jsx)(n.code,{children:"field_name: list {type: string}"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A nested list"}),": ",(0,l.jsx)(n.code,{children:"field_name: list{type: string}"})]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"When used in alter"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A simple type"}),": ",(0,l.jsx)(n.code,{children:"field_name { type: string }"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A list"}),": ",(0,l.jsx)(n.code,{children:"field_name { type: list {type: string} }"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"A nested list"}),": ",(0,l.jsx)(n.code,{children:"field_name {type: list{type:list{type:string}}}"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"create-model",children:"CREATE MODEL"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"CREATE MODEL [IF NOT EXISTS] .([primary] [null] field_name: field_type) [ WITH {property_name: property_value} ]\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Properties"}),": None"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["The ",(0,l.jsx)(n.strong,{children:"first field specified automatically becomes the primary key"})]}),"\n",(0,l.jsxs)(n.li,{children:["All ",(0,l.jsx)(n.strong,{children:"fields are not nullable by default"})]}),"\n",(0,l.jsxs)(n.li,{children:["To make a field nullable add the ",(0,l.jsx)(n.code,{children:"null"})," keyword before the field name"]}),"\n",(0,l.jsxs)(n.li,{children:["If you do not want the first field to become the primary key, then you must add the ",(0,l.jsx)(n.code,{children:"primary"})," keyword before the field that you want to use as the primary key"]}),"\n",(0,l.jsxs)(n.li,{children:["The field order is preserved. When doing an ",(0,l.jsx)(n.code,{children:"INSERT"})," you will have to supply values in the same order"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n",(0,l.jsxs)(n.li,{children:["when used with ",(0,l.jsx)(n.code,{children:"if not exists"}),": bool indicating whether the model was actually created or not (false indicates that it was already present and hence not created)"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-3",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"CREATE MODEL myspace.mymodel(username: string, password: string, null email_id: string, notes: list { type: string })\nCREATE MODEL IF NOT EXISTS myspace.mymodel(username: string, password: string, null email_id: string, notes: list { type: string })\n"})}),"\n",(0,l.jsx)(n.h3,{id:"alter-model-add",children:"ALTER MODEL ADD"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"-- add a single field\nALTER MODEL . ADD one_field { type: string }\n-- add multiple fields\nALTER MODEL . ADD (\n first_field { type: string },\n second_field { type: binary },\n)\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-4",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER MODEL myspace.mymodel ADD one_field { type: list { type: string } }\nALTER MODEL myspace.mymodel ADD (\n email_id: {\n type: string,\n nullable: true,\n },\n phone_number: {\n type: uint64,\n nullable: true,\n },\n)\n"})}),"\n",(0,l.jsx)(n.h3,{id:"alter-model-update",children:"ALTER MODEL UPDATE"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Syntax"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"-- update one field\nALTER MODEL . UPDATE one_field { type: string }\n-- update multiple fields\nALTER MODEL . UPDATE (\n first_field { type: string },\n second_field { type: binary },\n)\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"The primary key field cannot be modified"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-5",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER MODEL myspace.mymodel UPDATE my_int_field { type: uint64 }\nALTER MODEL myspace.mymodel UPDATE (\n my_int_field { type: uint64 },\n my_float_field { type: float64 }\n)\n"})}),"\n",(0,l.jsx)(n.h3,{id:"alter-model-remove",children:"ALTER MODEL REMOVE"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"-- remove one field\nALTER MODEL . REMOVE one_field\n-- remove multiple fields\nALTER MODEL . REMOVE (first_field, second_field, ...)\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"The primary key field cannot be removed (as is expected)"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),": empty or error"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-6",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"ALTER MODEL myspace.mymodel REMOVE useless_field\nALTER MODEL myspace.mymodel REMOVE (useless_field_1, useless_field2)\n"})}),"\n",(0,l.jsx)(n.h3,{id:"drop-model",children:"DROP MODEL"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Syntax"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP MODEL [IF EXISTS] [ALLOW NOT EMPTY] .\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Operational notes"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Non-empty models cannot be dropped"})," to avoid catastrophic drops"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"To drop a non-empty model"}),": you must run:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP MODEL ALLOW NOT EMPTY .\n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n",(0,l.jsxs)(n.li,{children:["when used with ",(0,l.jsx)(n.code,{children:"if exists"}),": bool indicating whether the model was actually present or not"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-7",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"DROP MODEL myspace.mymodel\nDROP ALLOW NOT EMPTY myspace.mymodel\n"})}),"\n",(0,l.jsx)(n.h3,{id:"truncate-model",children:"TRUNCATE MODEL"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"TRUNCATE MODEL .\n"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Access control"}),": ",(0,l.jsx)(n.code,{children:"root"})," only"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Operational notes"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Blocking"}),"\n",(0,l.jsx)(n.li,{children:"Blocks all DML queries until completion of execution"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Returns"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"empty or error"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"examples-8",children:"Examples"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"TRUNCATE MODEL myspace.mymodel\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(a,{...e})}):a(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>c});var l=s(6540);const r={},i=l.createContext(r);function d(e){const n=l.useContext(i);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),l.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fd615c45.001f3b59.js b/assets/js/fd615c45.0240e017.js similarity index 64% rename from assets/js/fd615c45.001f3b59.js rename to assets/js/fd615c45.0240e017.js index 3b31bc4af..89453377a 100644 --- a/assets/js/fd615c45.001f3b59.js +++ b/assets/js/fd615c45.0240e017.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4963],{8291:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>a});var i=s(4848),l=s(8453);const r={title:"Overview",id:"overview"},t=void 0,d={id:"blueql/overview",title:"Overview",description:"In this document we explore some of the meta parts of BlueQL. If you want to look at how you can use BlueQL, consider looking at the sections that follow.",source:"@site/docs/blueql/1.overview.md",sourceDirName:"blueql",slug:"/blueql/overview",permalink:"/blueql/overview",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Overview",id:"overview"},sidebar:"docs",previous:{title:"BlueQL",permalink:"/blueql/"},next:{title:"DDL",permalink:"/blueql/ddl"}},o={},a=[{value:"Identifiers",id:"identifiers",level:2},{value:"Keywords",id:"keywords",level:2},{value:"Data types",id:"data-types",level:2},{value:"Boolean",id:"boolean",level:3},{value:"Unsigned integers",id:"unsigned-integers",level:3},{value:"Signed integers",id:"signed-integers",level:3},{value:"Floating point values",id:"floating-point-values",level:3},{value:"Simple collections",id:"simple-collections",level:3},{value:"Complex collections",id:"complex-collections",level:3},{value:"Literals",id:"literals",level:2},{value:"Parameters",id:"parameters",level:2},{value:"Expressions",id:"expressions",level:2},{value:"DDL",id:"ddl",level:2},{value:"DML",id:"dml",level:2},{value:"DCL",id:"dcl",level:2},{value:"Differences from SQL",id:"differences-from-sql",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"In this document we explore some of the meta parts of BlueQL. If you want to look at how you can use BlueQL, consider looking at the sections that follow."}),"\n",(0,i.jsx)(n.p,{children:"Design principles:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Simplicity and clarity"}),": The language shouldn't be overwhelming to understand"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Security with mandatory parameterization"}),": We want to reduce the surface of injection attacks. For this reason, ",(0,i.jsx)(n.a,{href:"#parameters",children:"parameterization is mandatory"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Just like SQL, BlueQL has three categories of commands/queries inside it:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DDL"}),": Data definition language is used to define, modify and/or remove DDL objects such as ",(0,i.jsx)(n.code,{children:"space"}),"s and ",(0,i.jsx)(n.code,{children:"model"}),"s"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DCL"}),": Data control language is used to control the access to data, and perform other administrative tasks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DML"}),": Data manipulation language is used to manipulate data"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Jump to ",(0,i.jsx)(n.a,{href:"#differences-from-sql",children:"differences from SQL"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["This text is ",(0,i.jsx)(n.em,{children:"not"})," a detailed, formal guide. It's meant for developers and users who want to work with\nSkytable. If you need a more formal specification, like a grammar definition, please ask us, and we'll create\nit. We haven't published it yet because no one has requested it."]})}),"\n",(0,i.jsx)(n.h2,{id:"identifiers",children:"Identifiers"}),"\n",(0,i.jsxs)(n.p,{children:["Can begin with any ASCII alphabet or an underscore (",(0,i.jsx)(n.code,{children:"_"}),") and then have any number of alphanumeric characters and/or underscores."]}),"\n",(0,i.jsx)(n.h2,{id:"keywords",children:"Keywords"}),"\n",(0,i.jsx)(n.p,{children:"Keywords are identifiers with special meanings and hence can't be used as identifiers in other places. Here's a full-list of\nkeywords:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ts",children:'[\n "sysctl", "create", "alter", "drop", "use", "inspect", "describe", "insert", "select", "update",\n "delete", "exists", "table", "model", "space", "index", "type", "function", "rename", "add",\n "remove", "transform", "set", "return", "order", "sort", "group", "limit", "asc", "desc", "all",\n "by", "with", "on", "from", "into", "as", "to", "in", "of", "and", "or", "not", "if", "else",\n "where", "when", "allow", "auto", "default", "null", "transaction", "batch", "lock", "read",\n "write", "begin", "end", "key", "value", "primary", "truncate"\n]\n'})}),"\n",(0,i.jsx)(n.h2,{id:"data-types",children:"Data types"}),"\n",(0,i.jsx)(n.h3,{id:"boolean",children:"Boolean"}),"\n",(0,i.jsxs)(n.p,{children:["A boolean value, either ",(0,i.jsx)(n.code,{children:"true"})," or ",(0,i.jsx)(n.code,{children:"false"})]}),"\n",(0,i.jsx)(n.h3,{id:"unsigned-integers",children:"Unsigned integers"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"uint8"}),": unsigned 8-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"uint16"}),": unsigned 16-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"uint32"}),": unsigned 32-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"uint64"}),": unsigned 64-bit integer"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"signed-integers",children:"Signed integers"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sint8"}),": signed 8-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sint16"}),": signed 16-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sint32"}),": signed 32-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sint64"}),": signed 64-bit integer"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"floating-point-values",children:"Floating point values"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"float32"}),": a single-precision float"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"float64"}),": a double-precision float"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"simple-collections",children:"Simple collections"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"binary"}),": a binary blob represented as a sequence of ",(0,i.jsx)(n.code,{children:"uint8"})," values"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"string"}),": an UTF-8 string"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"complex-collections",children:"Complex collections"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"list"}),": a list of any of the data types, including nested lists","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["A list is represented as: ",(0,i.jsx)(n.code,{children:"[]"})," with values inbetween. For example, a ",(0,i.jsx)(n.code,{children:"list { type:string }"})," would be represented as:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:'["sayan", "loves", "dogs"]\n'})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Lists cannot contain null values"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"List can be nested"}),": You can have heavily nested lists like: ",(0,i.jsx)(n.code,{children:'[[[]], [["another one"]]]'})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"List can only have one base type"}),": This means that if you have a list like ",(0,i.jsx)(n.code,{children:"[[[string]]]"})," each element must either be the same nested list, or an empty list"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"Note",type:"info",children:(0,i.jsx)(n.p,{children:"New data types are frequently added, so treat this list as non-exhaustive."})}),"\n",(0,i.jsx)(n.h2,{id:"literals",children:"Literals"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Null literal: ",(0,i.jsx)(n.code,{children:"null"})]}),"\n",(0,i.jsxs)(n.li,{children:["Numeric literals:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Unsigned: ",(0,i.jsx)(n.code,{children:"1234"})]}),"\n",(0,i.jsxs)(n.li,{children:["Signed: ",(0,i.jsx)(n.code,{children:"[-]1234"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Floating point literals: ",(0,i.jsx)(n.code,{children:"[-]1234.5678"})]}),"\n",(0,i.jsxs)(n.li,{children:["String literals: ",(0,i.jsx)(n.code,{children:'"hello"'})]}),"\n",(0,i.jsx)(n.li,{children:"Binary literals: `binary`"}),"\n",(0,i.jsxs)(n.li,{children:["List literals: ",(0,i.jsx)(n.code,{children:"[..]"})]}),"\n",(0,i.jsxs)(n.li,{children:["Dictionaries: ",(0,i.jsx)(n.code,{children:"{: }"})]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"Literals are not available everywhere",type:"warning",children:[(0,i.jsx)(n.p,{children:"It is very important for you to know that literals are not allowed everywhere. The only literals allowed everywhere are:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Lists"}),"\n",(0,i.jsx)(n.li,{children:"Dictionaries"}),"\n"]}),(0,i.jsx)(n.p,{children:"Read below to understand why."})]}),"\n",(0,i.jsx)(n.h2,{id:"parameters",children:"Parameters"}),"\n",(0,i.jsxs)(n.p,{children:["All literals apart from dictionaries and lists must be used as parameters. ",(0,i.jsx)(n.strong,{children:"BlueQL only allows literals as parameters"}),". For example, using the Rust client, if you were to run this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"insert into myspace.mymodel('sayan', 'pass123', ['myfirstnote'])\n"})}),"\n",(0,i.jsx)(n.p,{children:"You are required to parameterize the query like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:'use skytable::query;\n\nlet query = query!("insert into myspace.mymode(?, ?, [?])", "sayan", "pass123", "myfirstnote")\n'})}),"\n",(0,i.jsxs)(n.p,{children:["If you try to run it without any parameters (don't forget that ",(0,i.jsx)(n.code,{children:"skysh"})," automatically parameterizes for convenience) the query\nwon't even compile."]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsx)(n.p,{children:"Just so you know, parameterizing involves passing a separate parameter list, with each parameter encoded. You wouldn't need to worry about this because the client driver does all of that for you!"}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"The question is why? The answer is security."})," SQL-injection vulernabilties have already costed companies a lot, so we don't\nwant to inherit that from SQL."]}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Also, parameterization is exclusively possible for literals"}),". This means that whenever you're accepting data from an untrusted\nsource, it becomes a parameter. If you try to not use parameters, the query will not even compile."]}),(0,i.jsx)(n.p,{children:"On a final note, BlueQL doesn't support comments of any form also for security reasons."})]}),"\n",(0,i.jsx)(n.h2,{id:"expressions",children:"Expressions"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"+="}),": add RHS to LHS","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Can be used outside arithmetic contexts"}),"\n",(0,i.jsxs)(n.li,{children:["Add a char to a field ",(0,i.jsx)(n.code,{children:"mystring"}),": ",(0,i.jsx)(n.code,{children:'mystring += ",world"'})]}),"\n",(0,i.jsxs)(n.li,{children:["Add a list to a nested list field: ",(0,i.jsx)(n.code,{children:'mylist += ["item in nested list"]'})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"-="}),": subtract RHS from LHS"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"/="}),": divide LHS by RHS"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"*="}),": multiply LHS by RHS"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"ddl",children:"DDL"}),"\n",(0,i.jsx)(n.p,{children:"Queries include:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Spaces:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"CREATE SPACE myspace [WITH { property: value, ... }]"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ALTER SPACE myspace [WITH { property: updated_value, ... }]"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"DROP SPACE [allow not empty] myspace"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Models:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"CREATE MODEL myspace.mymodel([primary] [null] field: field_type, ...) [WITH { property: value, ... }]"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ALTER MODEL myspace.mymodel (ADD ... | UPDATE ... | REMOVE ...)"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"DROP MODEL [allow not empty] myspace.mymodel"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"INSPECT GLOBAL"}),": inspects global state, shows a list of spaces and users"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"INSPECT SPACE "}),": inspects a single space, shows a list of models and other things"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"INSPECT MODEL "}),": inspects a single model, shows information about stored data and other things"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"dml",children:"DML"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"INSERT INTO myspace.mymodel(...)"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"SELECT col1, ... FROM myspace.mymodel WHERE ..."})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"UPDATE myspace.mymodel SET counter += 1 WHERE ..."})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"DELETE FROM myspace.mymode WHERE ..."})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"dcl",children:"DCL"}),"\n",(0,i.jsx)(n.p,{children:"Queries include:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"SYSCTL REPORT STATUS"}),": returns the status of the system. (Not a control query per se)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:'SYSCTL CREATE USER "username" WITH { password: ... }'}),": create a new user"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:'SYSCTL DROP USER "username"'}),": removes the user in question"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"differences-from-sql",children:"Differences from SQL"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"No literals (see above)"}),"\n",(0,i.jsx)(n.li,{children:"Mandatory parameterization (see above)"}),"\n",(0,i.jsx)(n.li,{children:"No semicolons!"}),"\n",(0,i.jsx)(n.li,{children:"Only one statement per query. For multiple statements batches must be used"}),"\n",(0,i.jsxs)(n.li,{children:["DML queries are point queries (hence must contain a ",(0,i.jsx)(n.code,{children:"WHERE"})," clause)"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>d});var i=s(6540);const l={},r=i.createContext(l);function t(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4963],{8291:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>a});var i=s(4848),l=s(8453);const r={title:"Overview",id:"overview"},t=void 0,d={id:"blueql/overview",title:"Overview",description:"In this document we explore some of the meta parts of BlueQL. If you want to look at how you can use BlueQL, consider looking at the sections that follow.",source:"@site/docs/blueql/1.overview.md",sourceDirName:"blueql",slug:"/blueql/overview",permalink:"/blueql/overview",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Overview",id:"overview"},sidebar:"docs",previous:{title:"BlueQL",permalink:"/blueql/"},next:{title:"DDL",permalink:"/blueql/ddl"}},o={},a=[{value:"Identifiers",id:"identifiers",level:2},{value:"Keywords",id:"keywords",level:2},{value:"Data types",id:"data-types",level:2},{value:"Boolean",id:"boolean",level:3},{value:"Unsigned integers",id:"unsigned-integers",level:3},{value:"Signed integers",id:"signed-integers",level:3},{value:"Floating point values",id:"floating-point-values",level:3},{value:"Simple collections",id:"simple-collections",level:3},{value:"Complex collections",id:"complex-collections",level:3},{value:"Literals",id:"literals",level:2},{value:"Parameters",id:"parameters",level:2},{value:"Expressions",id:"expressions",level:2},{value:"DDL",id:"ddl",level:2},{value:"DML",id:"dml",level:2},{value:"DCL",id:"dcl",level:2},{value:"Differences from SQL",id:"differences-from-sql",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"In this document we explore some of the meta parts of BlueQL. If you want to look at how you can use BlueQL, consider looking at the sections that follow."}),"\n",(0,i.jsx)(n.p,{children:"Design principles:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Simplicity and clarity"}),": The language shouldn't be overwhelming to understand"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Security with mandatory parameterization"}),": We want to reduce the surface of injection attacks. For this reason, ",(0,i.jsx)(n.a,{href:"#parameters",children:"parameterization is mandatory"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Just like SQL, BlueQL has three categories of commands/queries inside it:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DDL"}),": Data definition language is used to define, modify and/or remove DDL objects such as ",(0,i.jsx)(n.code,{children:"space"}),"s and ",(0,i.jsx)(n.code,{children:"model"}),"s"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DCL"}),": Data control language is used to control the access to data, and perform other administrative tasks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DML"}),": Data manipulation language is used to manipulate data"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Jump to ",(0,i.jsx)(n.a,{href:"#differences-from-sql",children:"differences from SQL"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["This text is ",(0,i.jsx)(n.em,{children:"not"})," a detailed, formal guide. It's meant for developers and users who want to work with\nSkytable. If you need a more formal specification, like a grammar definition, please ask us, and we'll create\nit. We haven't published it yet because no one has requested it."]})}),"\n",(0,i.jsx)(n.h2,{id:"identifiers",children:"Identifiers"}),"\n",(0,i.jsxs)(n.p,{children:["Can begin with any ASCII alphabet or an underscore (",(0,i.jsx)(n.code,{children:"_"}),") and then have any number of alphanumeric characters and/or underscores."]}),"\n",(0,i.jsx)(n.h2,{id:"keywords",children:"Keywords"}),"\n",(0,i.jsx)(n.p,{children:"Keywords are identifiers with special meanings and hence can't be used as identifiers in other places. Here's a full-list of\nkeywords:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ts",children:'[\n "sysctl", "create", "alter", "drop", "use", "inspect", "describe", "insert", "select", "update",\n "delete", "exists", "table", "model", "space", "index", "type", "function", "rename", "add",\n "remove", "transform", "set", "return", "order", "sort", "group", "limit", "asc", "desc", "all",\n "by", "with", "on", "from", "into", "as", "to", "in", "of", "and", "or", "not", "if", "else",\n "where", "when", "allow", "auto", "default", "null", "transaction", "batch", "lock", "read",\n "write", "begin", "end", "key", "value", "primary", "truncate"\n]\n'})}),"\n",(0,i.jsx)(n.h2,{id:"data-types",children:"Data types"}),"\n",(0,i.jsx)(n.h3,{id:"boolean",children:"Boolean"}),"\n",(0,i.jsxs)(n.p,{children:["A boolean value, either ",(0,i.jsx)(n.code,{children:"true"})," or ",(0,i.jsx)(n.code,{children:"false"})]}),"\n",(0,i.jsx)(n.h3,{id:"unsigned-integers",children:"Unsigned integers"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"uint8"}),": unsigned 8-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"uint16"}),": unsigned 16-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"uint32"}),": unsigned 32-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"uint64"}),": unsigned 64-bit integer"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"signed-integers",children:"Signed integers"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sint8"}),": signed 8-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sint16"}),": signed 16-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sint32"}),": signed 32-bit integer"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sint64"}),": signed 64-bit integer"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"floating-point-values",children:"Floating point values"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"float32"}),": a single-precision float"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"float64"}),": a double-precision float"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"simple-collections",children:"Simple collections"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"binary"}),": a binary blob represented as a sequence of ",(0,i.jsx)(n.code,{children:"uint8"})," values"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"string"}),": an UTF-8 string"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"complex-collections",children:"Complex collections"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"list"}),": a list of any of the data types, including nested lists","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["A list is represented as: ",(0,i.jsx)(n.code,{children:"[]"})," with values inbetween. For example, a ",(0,i.jsx)(n.code,{children:"list { type:string }"})," would be represented as:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:'["sayan", "loves", "dogs"]\n'})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Lists cannot contain null values"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"List can be nested"}),": You can have heavily nested lists like: ",(0,i.jsx)(n.code,{children:'[[[]], [["another one"]]]'})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"List can only have one base type"}),": This means that if you have a list like ",(0,i.jsx)(n.code,{children:"[[[string]]]"})," each element must either be the same nested list, or an empty list"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"Note",type:"info",children:(0,i.jsx)(n.p,{children:"New data types are frequently added, so treat this list as non-exhaustive."})}),"\n",(0,i.jsx)(n.h2,{id:"literals",children:"Literals"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Null literal: ",(0,i.jsx)(n.code,{children:"null"})]}),"\n",(0,i.jsxs)(n.li,{children:["Numeric literals:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Unsigned: ",(0,i.jsx)(n.code,{children:"1234"})]}),"\n",(0,i.jsxs)(n.li,{children:["Signed: ",(0,i.jsx)(n.code,{children:"[-]1234"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Floating point literals: ",(0,i.jsx)(n.code,{children:"[-]1234.5678"})]}),"\n",(0,i.jsxs)(n.li,{children:["String literals: ",(0,i.jsx)(n.code,{children:'"hello"'})]}),"\n",(0,i.jsx)(n.li,{children:"Binary literals: `binary`"}),"\n",(0,i.jsxs)(n.li,{children:["List literals: ",(0,i.jsx)(n.code,{children:"[..]"})]}),"\n",(0,i.jsxs)(n.li,{children:["Dictionaries: ",(0,i.jsx)(n.code,{children:"{: }"})]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"Literals are not available everywhere",type:"warning",children:[(0,i.jsx)(n.p,{children:"It is very important for you to know that literals are not allowed everywhere. The only literals allowed everywhere are:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Lists"}),"\n",(0,i.jsx)(n.li,{children:"Dictionaries"}),"\n"]}),(0,i.jsx)(n.p,{children:"Read below to understand why."})]}),"\n",(0,i.jsx)(n.h2,{id:"parameters",children:"Parameters"}),"\n",(0,i.jsxs)(n.p,{children:["All literals apart from dictionaries and lists must be used as parameters. ",(0,i.jsx)(n.strong,{children:"BlueQL only allows literals as parameters"}),". For example, using the Rust client, if you were to run this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"insert into myspace.mymodel('sayan', 'pass123', ['myfirstnote'])\n"})}),"\n",(0,i.jsx)(n.p,{children:"You are required to parameterize the query like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:'use skytable::query;\n\nlet query = query!("insert into myspace.mymodel(?, ?, [?])", "sayan", "pass123", "myfirstnote")\n'})}),"\n",(0,i.jsxs)(n.p,{children:["If you try to run it without any parameters (don't forget that ",(0,i.jsx)(n.code,{children:"skysh"})," automatically parameterizes for convenience) the query\nwon't even compile."]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsx)(n.p,{children:"Just so you know, parameterizing involves passing a separate parameter list, with each parameter encoded. You wouldn't need to worry about this because the client driver does all of that for you!"}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"The question is why? The answer is security."})," SQL-injection vulernabilties have already costed companies a lot, so we don't\nwant to inherit that from SQL."]}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Also, parameterization is exclusively possible for literals"}),". This means that whenever you're accepting data from an untrusted\nsource, it becomes a parameter. If you try to not use parameters, the query will not even compile."]}),(0,i.jsx)(n.p,{children:"On a final note, BlueQL doesn't support comments of any form also for security reasons."})]}),"\n",(0,i.jsx)(n.h2,{id:"expressions",children:"Expressions"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"+="}),": add RHS to LHS","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Can be used outside arithmetic contexts"}),"\n",(0,i.jsxs)(n.li,{children:["Add a char to a field ",(0,i.jsx)(n.code,{children:"mystring"}),": ",(0,i.jsx)(n.code,{children:'mystring += ",world"'})]}),"\n",(0,i.jsxs)(n.li,{children:["Add a list to a nested list field: ",(0,i.jsx)(n.code,{children:'mylist += ["item in nested list"]'})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"-="}),": subtract RHS from LHS"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"/="}),": divide LHS by RHS"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"*="}),": multiply LHS by RHS"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"ddl",children:"DDL"}),"\n",(0,i.jsx)(n.p,{children:"Queries include:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Spaces:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"CREATE SPACE myspace [WITH { property: value, ... }]"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ALTER SPACE myspace [WITH { property: updated_value, ... }]"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"DROP SPACE [allow not empty] myspace"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Models:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"CREATE MODEL myspace.mymodel([primary] [null] field: field_type, ...) [WITH { property: value, ... }]"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"ALTER MODEL myspace.mymodel (ADD ... | UPDATE ... | REMOVE ...)"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"DROP MODEL [allow not empty] myspace.mymodel"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"INSPECT GLOBAL"}),": inspects global state, shows a list of spaces and users"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"INSPECT SPACE "}),": inspects a single space, shows a list of models and other things"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"INSPECT MODEL "}),": inspects a single model, shows information about stored data and other things"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"dml",children:"DML"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"INSERT INTO myspace.mymodel(...)"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"SELECT col1, ... FROM myspace.mymodel WHERE ..."})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"UPDATE myspace.mymodel SET counter += 1 WHERE ..."})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"DELETE FROM myspace.mymodel WHERE ..."})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"dcl",children:"DCL"}),"\n",(0,i.jsx)(n.p,{children:"Queries include:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"SYSCTL REPORT STATUS"}),": returns the status of the system. (Not a control query per se)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:'SYSCTL CREATE USER "username" WITH { password: ... }'}),": create a new user"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:'SYSCTL DROP USER "username"'}),": removes the user in question"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"differences-from-sql",children:"Differences from SQL"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"No literals (see above)"}),"\n",(0,i.jsx)(n.li,{children:"Mandatory parameterization (see above)"}),"\n",(0,i.jsx)(n.li,{children:"No semicolons!"}),"\n",(0,i.jsx)(n.li,{children:"Only one statement per query. For multiple statements batches must be used"}),"\n",(0,i.jsxs)(n.li,{children:["DML queries are point queries (hence must contain a ",(0,i.jsx)(n.code,{children:"WHERE"})," clause)"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>d});var i=s(6540);const l={},r=i.createContext(l);function t(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ff78723e.dad4e121.js b/assets/js/ff78723e.071aa9ae.js similarity index 67% rename from assets/js/ff78723e.dad4e121.js rename to assets/js/ff78723e.071aa9ae.js index 5d7201855..9343c044a 100644 --- a/assets/js/ff78723e.dad4e121.js +++ b/assets/js/ff78723e.071aa9ae.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5425],{955:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var i=t(4848),a=t(8453);const s={id:"architecture",title:"Architecture"},r=void 0,o={id:"architecture",title:"Architecture",description:"Skytable is a modern NoSQL database that prioritises performance, scalability and reliability while providing a rich and powerful querying interface.",source:"@site/docs/c.architecture.md",sourceDirName:".",slug:"/architecture",permalink:"/architecture",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"architecture",title:"Architecture"},sidebar:"docs",previous:{title:"Client drivers",permalink:"/libraries"},next:{title:"BlueQL",permalink:"/blueql/"}},l={},d=[{value:"Fundamental differences from relational systems",id:"fundamental-differences-from-relational-systems",level:2},{value:"Data model",id:"data-model",level:2},{value:"A space is like a database",id:"a-space-is-like-a-database",level:3},{value:"A model is like a table",id:"a-model-is-like-a-table",level:3},{value:"Query language",id:"query-language",level:2},{value:"Transactions",id:"transactions",level:2},{value:"Storage",id:"storage",level:2},{value:"Scalability",id:"scalability",level:2},{value:"Networking",id:"networking",level:2},{value:"Backwards compatibility",id:"backwards-compatibility",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["Skytable is a modern NoSQL database that prioritises performance, scalability and reliability while providing a rich and powerful querying interface.\nWe are generally targetting an audience that wants to build high performance, large-scale, low latency applications, such as social networking services,\nauth services, adtech and such. Skytable is designed to work with both ",(0,i.jsx)(n.strong,{children:"structured and semi-structured data"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Our goal is to provide you with a powerful and solid foundation for your application with no gimmicks \u2014 just a solid core. That's why, every component in\nSkytable has been engineered from the ground up, from scratch."}),"\n",(0,i.jsx)(n.p,{children:"And all of that, without you having to be an expert, and with the least maintenance that you can expect."}),"\n",(0,i.jsx)(n.h2,{id:"fundamental-differences-from-relational-systems",children:"Fundamental differences from relational systems"}),"\n",(0,i.jsx)(n.p,{children:"BlueQL kind of looks and feels like using SQL with a relational database but that doesn't make Skytable's internals the same, with the most important\ndistinction being the fact that Skytable has a NoSQL engine! But Skytable's evaluation and execution of queries is fundamentally different from SQL\ncounterparts and even NoSQL engines. Here are some key differences:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["All DML queries are point queries and ",(0,i.jsx)(n.strong,{children:"not"})," range queries:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"This means that they will either return atleast one row or error"}),"\n",(0,i.jsxs)(n.li,{children:["If you intend to do a multi-row query, then it won't work unless you add ",(0,i.jsx)(n.code,{children:"ALL"}),". ",(0,i.jsx)(n.code,{children:"ALL"})," by itself indicates that you're applying (or selecting) a large range and can be inefficient"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Multi-row DML queries are slow and inefficient and are discouraged"}),"\n",(0,i.jsxs)(n.li,{children:["You can ",(0,i.jsx)(n.strong,{children:"only"})," query on the primary index, once again because of speed (and the problem with scaling multiple indexes) with a fixed set of operators."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Remember, in NoSQL systems we denormalize."})," Hence, no ",(0,i.jsx)(n.code,{children:"JOIN"}),"s or foreign keys as with many other NoSQL systems"]}),"\n",(0,i.jsxs)(n.li,{children:["A different transactional model:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"All DDL and DCL queries are ACID transactions"}),"\n",(0,i.jsxs)(n.li,{children:["However, DML transactions are not ACID and instead are efficiently batched and are automatically made part of a batch\ntransaction. The engine decides ",(0,i.jsx)(n.em,{children:"when"})," it will execute them, for example based on the pressure on cache. That's because our\nfocus is to maximize throughput"]}),"\n",(0,i.jsxs)(n.li,{children:["All these differences mean that ",(0,i.jsx)(n.strong,{children:"DDL and DCL transactions are ACID transactions"})," while ",(0,i.jsxs)(n.strong,{children:["DML queries are ACI and ",(0,i.jsx)(n.em,{children:"eventually"})," D"]})," (we call it a ",(0,i.jsx)(n.em,{children:"delayed durability transaction"}),"). This delay however can be adjusted to make sure that the DML\nqueries ",(0,i.jsx)(n.em,{children:"emulate"})," ACID transactions but that defeats the point of the eventually durable system which aims to heavily increase throughput."]}),"\n",(0,i.jsx)(n.li,{children:"The idea of eventually durable transactions relies on the idea that hardware failure even though prominent is still rare,\nthanks to the extreme hard work that cloud vendors put into reliability engineering. If you plan to run on unreliable hardware, then the delay setting (reliability service) is what you need to change."}),"\n",(0,i.jsxs)(n.li,{children:["For extremely unreliable hardware on the other hand, we're working on a new storage driver ",(0,i.jsx)(n.code,{children:"rtsyncblock"})," that is expected to be released in Q1'24"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"The transactional engine powering DDL and DCL queries might often choose to demote a transaction to a virtual transaction which makes sure that the transaction is obviously durable but not necessarily actually executed but is eventually executed. If the system crashes, the engine will still be able to actually execute the transaction (even if it crashed halfway)"}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"We believe you can now hopefully see how Skytable's workings are fundamentally different from traditional engines. And, we know\nthat you might have a lot of questions! If you do, please reach out. We're here to help."})}),"\n",(0,i.jsx)(n.h2,{id:"data-model",children:"Data model"}),"\n",(0,i.jsxs)(n.p,{children:["Just like SQL has ",(0,i.jsx)(n.code,{children:"DATABASE"}),"s, Skytable has ",(0,i.jsx)(n.code,{children:"SPACE"}),"s which are collections of what we call data containers like tables.\nIn Skytable lingo, we don't call them tables but call them ",(0,i.jsx)(n.code,{children:"MODEL"}),"s which enable you to ",(0,i.jsx)(n.em,{children:"define your data model"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["While a ",(0,i.jsx)(n.code,{children:"MODEL"})," is the only data container for now, many more are set to come. Now is a good time to ",(0,i.jsx)(n.a,{href:"https://discord.gg/QptWFdx",children:"join our discord server"})," where you can directly chat with the developers working on Skytable and all our awesome community members."]})}),"\n",(0,i.jsxs)(n.h3,{id:"a-space-is-like-a-database",children:["A ",(0,i.jsx)(n.code,{children:"space"})," is like a ",(0,i.jsx)(n.code,{children:"database"})]}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.code,{children:"space"})," in Skytable is a collection of ",(0,i.jsx)(n.code,{children:"model"}),"s and other objects, and settings. It is different from a traditional SQL\nDatabase (that is created with SQL's ",(0,i.jsx)(n.code,{children:"CREATE DATABASE"}),") because it is not meant for tables only, but many other things."]}),"\n",(0,i.jsxs)(n.p,{children:['Spaces have "space local" settings that can be set for the space (and will be respected by all its ',(0,i.jsx)(n.code,{children:"models"})," and other items). You'll learn more about this in the section on DDL."]}),"\n",(0,i.jsxs)(n.h3,{id:"a-model-is-like-a-table",children:["A ",(0,i.jsx)(n.code,{children:"model"})," is like a ",(0,i.jsx)(n.code,{children:"table"})]}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.code,{children:"model"})," in Skytable is like a ",(0,i.jsx)(n.code,{children:"table"})," in SQL but is vastly different because of certain concepts such as:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"DML queries are point and not range queries by default"}),"\n",(0,i.jsx)(n.li,{children:"Restrictions on indexes"}),"\n",(0,i.jsxs)(n.li,{children:["Settings (which can't be created in traditional ",(0,i.jsx)(n.code,{children:"table"}),"s)"]}),"\n",(0,i.jsx)(n.li,{children:"Semi-structured data: with collection types in columns such as lists and dictionaries that violates some of the ideas of\ntraditional schema enforcement"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"query-language",children:"Query language"}),"\n",(0,i.jsxs)(n.p,{children:["Skytable has its own query language BlueQL",(0,i.jsx)("sup",{children:"TM"})," which takes a lot of inspiration from SQL but makes several different (and sometimes vastly different) design choices, focused on clarity, speed, simplicity and most importantly, security."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, Skytable's BlueQL",(0,i.jsx)("sup",{children:"TM"})," ",(0,i.jsx)(n.em,{children:"only"})," allows the parameterization of queries. All the queries you ran previously with strings and numbers directly were only possible because the REPL client smartly does the paramterization behind the scenes. This is done for security. You'll learn more about BlueQL next."]}),"\n",(0,i.jsx)(n.h2,{id:"transactions",children:"Transactions"}),"\n",(0,i.jsx)(n.p,{children:"Skytable's DDL and DCL queries are all ACID transactions. However, DML queries use an AOF-style storage driver that periodically\nrecords, analyses and then intelligently syncs the changes to disk. We're working on making ACID transactions widely available\nacross DML queries as well."}),"\n",(0,i.jsx)(n.h2,{id:"storage",children:"Storage"}),"\n",(0,i.jsx)(n.p,{children:"Skytable's storage engine is collectively called the Skytable Disk Storage Subsystem or SDSS for short. The storage engine uses\nseveral different storage drivers, using ones appropriate for the task. We do not use RocksDB or any other engine but we\nimplement everything in house, engineering them piece by piece."}),"\n",(0,i.jsx)(n.admonition,{title:"Features on track",type:"info",children:(0,i.jsxs)(n.p,{children:["At this point, Skytable is primarily in-memory which means that while it uses disk storage for durability, most data is stored in-memory. ",(0,i.jsx)(n.strong,{children:"This is going to change in the near future as the team is working on building a custom log-based engine."})," As you might understand, this is not an everyday task and as we incorporate new ideas it will take some time. But if you're seeing this in 2023, you can expect us to ship something by Q2 2024."]})}),"\n",(0,i.jsx)(n.p,{children:"DDL and DCL transactions use a log-based append-only driver while DML queries use a custom log-based append-only driver that is able to intelligently handle concurrent changes. The team will implement new and updated storage drivers from time to time but you do not have to worry about anything, due to our promise for backwards compatibility (see below)."}),"\n",(0,i.jsx)(n.h2,{id:"scalability",children:"Scalability"}),"\n",(0,i.jsx)(n.p,{children:"Skytable is heavily multithreaded enabling incredible vertical scalability and you can witness it for yourself by running benchmarks (or looking at ones that we publish). Clustering and replication are on track to be released soon."}),"\n",(0,i.jsx)(n.admonition,{title:"Implementations on track",type:"info",children:(0,i.jsx)(n.p,{children:"Clustering and replication are right on track and we're expecting to deliver them by May, 2024. We'd also like to note that\nclustering is too important to ignore so you can be assured that we're hard at work on it."})}),"\n",(0,i.jsx)(n.p,{children:"Skytable will use atleast as many threads as the number of logical CPUs present on the host. At this moment it is not possible to limit multithreading because multithreading is a part of Skytable's design principles and every attempt is made to exploit available CPU cores to the fullest."}),"\n",(0,i.jsx)(n.h2,{id:"networking",children:"Networking"}),"\n",(0,i.jsx)(n.p,{children:"Skytable uses its own in-house Skyhash protocol for client-server communication. It is built on top of TCP, enabling any programming language that has a\nTCP client to use it without issues. There are three phases in the connection:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Handshake: All auth data, compatibility information and other data is exchanged at this step"}),"\n",(0,i.jsx)(n.li,{children:"Connection mode selection: based on the handshake parameters a connection mode is chosen and the server responds with the chosen exchange mode"}),"\n",(0,i.jsx)(n.li,{children:"Data exchange: This is where the real querying happens"}),"\n",(0,i.jsxs)(n.li,{children:["Termination: there is no special step; just a ",(0,i.jsx)(n.code,{children:"TCP FIN"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["You can ",(0,i.jsx)(n.a,{href:"protocol",children:"read more about the protocol here"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"backwards-compatibility",children:"Backwards compatibility"}),"\n",(0,i.jsx)(n.p,{children:"We make the promise to you that no matter what changes in Skytable, you will always be able to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Upgrade from one version to another without data loss or too many hoops"}),"\n",(0,i.jsx)(n.li,{children:"Export data from Skytable at any time"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"More technically:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"For minor/patch releases"}),": The minor/patch is just in the name but it indicates that no data migration effort is needed. ",(0,i.jsx)(n.strong,{children:"No minor releases ever need data migration, and any migration is done automatically"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"For major releases"}),": Major releases generally introduce breaking changes (just like the upgrade from ",(0,i.jsx)(n.code,{children:"0.7.x"})," to ",(0,i.jsx)(n.code,{children:"0.8.0"})," is a largely breaking change). ",(0,i.jsx)(n.strong,{children:"Major releases will either automatically upgrade the data files or require you to use a migration tool that is shipped with the bundle"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Definitions (closely following semantic versioning):","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"A major release"})," is something like ",(0,i.jsx)(n.code,{children:"1.0.0"})," to ",(0,i.jsx)(n.code,{children:"2.0.0"})," or ",(0,i.jsx)(n.code,{children:"0.8.0"})," to ",(0,i.jsx)(n.code,{children:"0.9.0"})," (in development versions, 0.8.0 to 0.9.0 is considered a major version\nbump)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"A minor release"})," is something like ",(0,i.jsx)(n.code,{children:"1.0.0"})," to ",(0,i.jsx)(n.code,{children:"1.1.0"})," or ",(0,i.jsx)(n.code,{children:"0.8.0"})," to ",(0,i.jsx)(n.code,{children:"0.8.1"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"A patch release"})," is something like ",(0,i.jsx)(n.code,{children:"1.0.0"})," to ",(0,i.jsx)(n.code,{children:"1.0.1"})," or ",(0,i.jsx)(n.code,{children:"0.8.0"})," to ",(0,i.jsx)(n.code,{children:"0.8.1"})," (note that in development versions there is no distinction between a minor and patch release)"]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});var i=t(6540);const a={},s=i.createContext(a);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5425],{955:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var i=t(4848),a=t(8453);const s={id:"architecture",title:"Architecture"},r=void 0,o={id:"architecture",title:"Architecture",description:"Skytable is a modern NoSQL database that prioritises performance, scalability and reliability while providing a rich and powerful querying interface.",source:"@site/docs/c.architecture.md",sourceDirName:".",slug:"/architecture",permalink:"/architecture",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"architecture",title:"Architecture"},sidebar:"docs",previous:{title:"Client drivers",permalink:"/libraries"},next:{title:"BlueQL",permalink:"/blueql/"}},l={},d=[{value:"Fundamental differences from relational systems",id:"fundamental-differences-from-relational-systems",level:2},{value:"Data model",id:"data-model",level:2},{value:"A space is like a database",id:"a-space-is-like-a-database",level:3},{value:"A model is like a table",id:"a-model-is-like-a-table",level:3},{value:"Query language",id:"query-language",level:2},{value:"Transactions",id:"transactions",level:2},{value:"Storage",id:"storage",level:2},{value:"Scalability",id:"scalability",level:2},{value:"Networking",id:"networking",level:2},{value:"Backwards compatibility",id:"backwards-compatibility",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["Skytable is a modern NoSQL database that prioritises performance, scalability and reliability while providing a rich and powerful querying interface.\nWe are generally targetting an audience that wants to build high performance, large-scale, low latency applications, such as social networking services,\nauth services, adtech and such. Skytable is designed to work with both ",(0,i.jsx)(n.strong,{children:"structured and semi-structured data"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Our goal is to provide you with a powerful and solid foundation for your application with no gimmicks \u2014 just a solid core. That's why, every component in\nSkytable has been engineered from the ground up, from scratch."}),"\n",(0,i.jsx)(n.p,{children:"And all of that, without you having to be an expert, and with the least maintenance that you can expect."}),"\n",(0,i.jsx)(n.h2,{id:"fundamental-differences-from-relational-systems",children:"Fundamental differences from relational systems"}),"\n",(0,i.jsx)(n.p,{children:"BlueQL kind of looks and feels like using SQL with a relational database but that doesn't make Skytable's internals the same, with the most important\ndistinction being the fact that Skytable has a NoSQL engine! But Skytable's evaluation and execution of queries is fundamentally different from SQL\ncounterparts and even NoSQL engines. Here are some key differences:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["All DML queries are point queries and ",(0,i.jsx)(n.strong,{children:"not"})," range queries:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"This means that they will either return atleast one row or error"}),"\n",(0,i.jsxs)(n.li,{children:["If you intend to do a multi-row query, then it won't work unless you add ",(0,i.jsx)(n.code,{children:"ALL"}),". ",(0,i.jsx)(n.code,{children:"ALL"})," by itself indicates that you're applying (or selecting) a large range and can be inefficient"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Multi-row DML queries are slow and inefficient and are discouraged"}),"\n",(0,i.jsxs)(n.li,{children:["You can ",(0,i.jsx)(n.strong,{children:"only"})," query on the primary index, once again because of speed (and the problem with scaling multiple indexes) with a fixed set of operators."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Remember, in NoSQL systems we denormalize."})," Hence, no ",(0,i.jsx)(n.code,{children:"JOIN"}),"s or foreign keys as with many other NoSQL systems"]}),"\n",(0,i.jsxs)(n.li,{children:["A different transactional model:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"All DDL and DCL queries are ACID transactions"}),"\n",(0,i.jsxs)(n.li,{children:["However, DML transactions are not ACID and instead are efficiently batched and are automatically made part of a batch\ntransaction. The engine decides ",(0,i.jsx)(n.em,{children:"when"})," it will execute them, for example based on the pressure on cache. That's because our\nfocus is to maximize throughput"]}),"\n",(0,i.jsxs)(n.li,{children:["All these differences mean that ",(0,i.jsx)(n.strong,{children:"DDL and DCL transactions are ACID transactions"})," while ",(0,i.jsxs)(n.strong,{children:["DML queries are ACI and ",(0,i.jsx)(n.em,{children:"eventually"})," D"]})," (we call it a ",(0,i.jsx)(n.em,{children:"delayed durability transaction"}),"). This delay however can be adjusted to make sure that the DML\nqueries ",(0,i.jsx)(n.em,{children:"emulate"})," ACID transactions but that defeats the point of the eventually durable system which aims to heavily increase throughput."]}),"\n",(0,i.jsx)(n.li,{children:"The idea of eventually durable transactions relies on the idea that hardware failure even though prominent is still rare,\nthanks to the extreme hard work that cloud vendors put into reliability engineering. If you plan to run on unreliable hardware, then the delay setting (reliability service) is what you need to change."}),"\n",(0,i.jsxs)(n.li,{children:["For extremely unreliable hardware on the other hand, we're working on a new storage driver ",(0,i.jsx)(n.code,{children:"rtsyncblock"})," that is expected to be released in Q1'24"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"The transactional engine powering DDL and DCL queries might often choose to demote a transaction to a virtual transaction which makes sure that the transaction is obviously durable but not necessarily actually executed but is eventually executed. If the system crashes, the engine will still be able to actually execute the transaction (even if it crashed halfway)"}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"We believe you can now hopefully see how Skytable's workings are fundamentally different from traditional engines. And, we know\nthat you might have a lot of questions! If you do, please reach out. We're here to help."})}),"\n",(0,i.jsx)(n.h2,{id:"data-model",children:"Data model"}),"\n",(0,i.jsxs)(n.p,{children:["Just like SQL has ",(0,i.jsx)(n.code,{children:"DATABASE"}),"s, Skytable has ",(0,i.jsx)(n.code,{children:"SPACE"}),"s which are collections of what we call data containers like tables.\nIn Skytable lingo, we don't call them tables but call them ",(0,i.jsx)(n.code,{children:"MODEL"}),"s which enable you to ",(0,i.jsx)(n.em,{children:"define your data model"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["While a ",(0,i.jsx)(n.code,{children:"MODEL"})," is the only data container for now, many more are set to come. Now is a good time to ",(0,i.jsx)(n.a,{href:"https://discord.gg/QptWFdx",children:"join our discord server"})," where you can directly chat with the developers working on Skytable and all our awesome community members."]})}),"\n",(0,i.jsxs)(n.h3,{id:"a-space-is-like-a-database",children:["A ",(0,i.jsx)(n.code,{children:"space"})," is like a ",(0,i.jsx)(n.code,{children:"database"})]}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.code,{children:"space"})," in Skytable is a collection of ",(0,i.jsx)(n.code,{children:"model"}),"s and other objects, and settings. It is different from a traditional SQL\nDatabase (that is created with SQL's ",(0,i.jsx)(n.code,{children:"CREATE DATABASE"}),") because it is not meant for tables only, but many other things."]}),"\n",(0,i.jsxs)(n.p,{children:['Spaces have "space local" settings that can be set for the space (and will be respected by all its ',(0,i.jsx)(n.code,{children:"models"})," and other items). You'll learn more about this in the section on DDL."]}),"\n",(0,i.jsxs)(n.h3,{id:"a-model-is-like-a-table",children:["A ",(0,i.jsx)(n.code,{children:"model"})," is like a ",(0,i.jsx)(n.code,{children:"table"})]}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.code,{children:"model"})," in Skytable is like a ",(0,i.jsx)(n.code,{children:"table"})," in SQL but is vastly different because of certain concepts such as:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"DML queries are point and not range queries by default"}),"\n",(0,i.jsx)(n.li,{children:"Restrictions on indexes"}),"\n",(0,i.jsxs)(n.li,{children:["Settings (which can't be created in traditional ",(0,i.jsx)(n.code,{children:"table"}),"s)"]}),"\n",(0,i.jsx)(n.li,{children:"Semi-structured data: with collection types in columns such as lists and dictionaries that violates some of the ideas of\ntraditional schema enforcement"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"query-language",children:"Query language"}),"\n",(0,i.jsxs)(n.p,{children:["Skytable has its own query language BlueQL",(0,i.jsx)("sup",{children:"TM"})," which takes a lot of inspiration from SQL but makes several different (and sometimes vastly different) design choices, focused on clarity, speed, simplicity and most importantly, security."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, Skytable's BlueQL",(0,i.jsx)("sup",{children:"TM"})," ",(0,i.jsx)(n.em,{children:"only"})," allows the parameterization of queries. All the queries you ran previously with strings and numbers directly were only possible because the REPL client smartly does the paramterization behind the scenes. This is done for security. You'll learn more about BlueQL next."]}),"\n",(0,i.jsx)(n.h2,{id:"transactions",children:"Transactions"}),"\n",(0,i.jsx)(n.p,{children:"Skytable's DDL and DCL queries are all ACID transactions. However, DML queries use an AOF-style storage driver that periodically\nrecords, analyses and then intelligently syncs the changes to disk. We're working on making ACID transactions widely available\nacross DML queries as well."}),"\n",(0,i.jsx)(n.h2,{id:"storage",children:"Storage"}),"\n",(0,i.jsx)(n.p,{children:"Skytable's storage engine is collectively called the Skytable Disk Storage Subsystem or SDSS for short. The storage engine uses\nseveral different storage drivers, using ones appropriate for the task. We do not use RocksDB or any other engine but we\nimplement everything in house, engineering them piece by piece."}),"\n",(0,i.jsx)(n.admonition,{title:"Features on track",type:"info",children:(0,i.jsxs)(n.p,{children:["At this point, Skytable is primarily in-memory which means that while it uses disk storage for durability, most data is stored in-memory. ",(0,i.jsx)(n.strong,{children:"This is going to change in the near future as the team is working on building a custom log-based engine."})," As you might understand, this is not an everyday task and as we incorporate new ideas it will take some time. But if you're seeing this in 2024, you can expect us to ship something by early 2025."]})}),"\n",(0,i.jsx)(n.p,{children:"DDL and DCL transactions use a log-based append-only driver while DML queries use a custom log-based append-only driver that is able to intelligently handle concurrent changes. The team will implement new and updated storage drivers from time to time but you do not have to worry about anything, due to our promise for backwards compatibility (see below)."}),"\n",(0,i.jsx)(n.h2,{id:"scalability",children:"Scalability"}),"\n",(0,i.jsx)(n.p,{children:"Skytable is heavily multithreaded enabling incredible vertical scalability and you can witness it for yourself by running benchmarks (or looking at ones that we publish). Clustering and replication are on track to be released soon."}),"\n",(0,i.jsx)(n.admonition,{title:"Implementations on track",type:"info",children:(0,i.jsx)(n.p,{children:"Clustering and replication are right on track and we're expecting to deliver them by May, 2024. We'd also like to note that\nclustering is too important to ignore so you can be assured that we're hard at work on it."})}),"\n",(0,i.jsx)(n.p,{children:"Skytable will use atleast as many threads as the number of logical CPUs present on the host. At this moment it is not possible to limit multithreading because multithreading is a part of Skytable's design principles and every attempt is made to exploit available CPU cores to the fullest."}),"\n",(0,i.jsx)(n.h2,{id:"networking",children:"Networking"}),"\n",(0,i.jsx)(n.p,{children:"Skytable uses its own in-house Skyhash protocol for client-server communication. It is built on top of TCP, enabling any programming language that has a\nTCP client to use it without issues. There are three phases in the connection:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Handshake: All auth data, compatibility information and other data is exchanged at this step"}),"\n",(0,i.jsx)(n.li,{children:"Connection mode selection: based on the handshake parameters a connection mode is chosen and the server responds with the chosen exchange mode"}),"\n",(0,i.jsx)(n.li,{children:"Data exchange: This is where the real querying happens"}),"\n",(0,i.jsxs)(n.li,{children:["Termination: there is no special step; just a ",(0,i.jsx)(n.code,{children:"TCP FIN"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["You can ",(0,i.jsx)(n.a,{href:"protocol",children:"read more about the protocol here"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"backwards-compatibility",children:"Backwards compatibility"}),"\n",(0,i.jsx)(n.p,{children:"We make the promise to you that no matter what changes in Skytable, you will always be able to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Upgrade from one version to another without data loss or too many hoops"}),"\n",(0,i.jsx)(n.li,{children:"Export data from Skytable at any time"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"More technically:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"For minor/patch releases"}),": The minor/patch is just in the name but it indicates that no data migration effort is needed. ",(0,i.jsx)(n.strong,{children:"No minor releases ever need data migration, and any migration is done automatically"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"For major releases"}),": Major releases generally introduce breaking changes (just like the upgrade from ",(0,i.jsx)(n.code,{children:"0.7.x"})," to ",(0,i.jsx)(n.code,{children:"0.8.0"})," is a largely breaking change). ",(0,i.jsx)(n.strong,{children:"Major releases will either automatically upgrade the data files or require you to use a migration tool that is shipped with the bundle"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Definitions (closely following semantic versioning):","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"A major release"})," is something like ",(0,i.jsx)(n.code,{children:"1.0.0"})," to ",(0,i.jsx)(n.code,{children:"2.0.0"})," or ",(0,i.jsx)(n.code,{children:"0.8.0"})," to ",(0,i.jsx)(n.code,{children:"0.9.0"})," (in development versions, 0.8.0 to 0.9.0 is considered a major version\nbump)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"A minor release"})," is something like ",(0,i.jsx)(n.code,{children:"1.0.0"})," to ",(0,i.jsx)(n.code,{children:"1.1.0"})," or ",(0,i.jsx)(n.code,{children:"0.8.0"})," to ",(0,i.jsx)(n.code,{children:"0.8.1"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"A patch release"})," is something like ",(0,i.jsx)(n.code,{children:"1.0.0"})," to ",(0,i.jsx)(n.code,{children:"1.0.1"})," or ",(0,i.jsx)(n.code,{children:"0.8.0"})," to ",(0,i.jsx)(n.code,{children:"0.8.1"})," (note that in development versions there is no distinction between a minor and patch release)"]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});var i=t(6540);const a={},s=i.createContext(a);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.534e49fc.js b/assets/js/runtime~main.7a31173a.js similarity index 98% rename from assets/js/runtime~main.534e49fc.js rename to assets/js/runtime~main.7a31173a.js index 8cca56615..491fc605d 100644 --- a/assets/js/runtime~main.534e49fc.js +++ b/assets/js/runtime~main.7a31173a.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,b,f,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return d[e].call(c.exports,c,c.exports,r),c.exports}r.m=d,e=[],r.O=(a,c,b,f)=>{if(!c){var d=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,b,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,b){if(1&b&&(e=this(e)),8&b)return e;if("object"==typeof e&&e){if(4&b&&e.__esModule)return e;if(16&b&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var d={};a=a||[null,c({}),c([]),c(c)];for(var t=2&b&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,r.d(f,d),f},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({168:"0f669020",204:"43cf645b",284:"1c5bdcc0",295:"b34fd168",322:"b1d9ab1e",329:"55771474",491:"6a9eda4d",503:"2ef51344",623:"670c12fe",651:"f6ca6b97",698:"bef7336c",705:"d03628f5",832:"362a08a0",839:"bf86ff3c",893:"939cc5d6",957:"c141421f",1010:"3e832dc9",1071:"18abd1b1",1135:"00849eb8",1245:"588b3e90",1288:"1573eefc",1312:"85c21da9",1313:"b8a88df5",1496:"a9f8d366",1511:"3e753cd6",1535:"733fd614",1567:"22dd74f7",1597:"3593a311",1648:"1b355885",1691:"d0914994",1736:"0a6d04ec",1778:"e85ca7bd",1807:"859ae2ee",1881:"6bddfb77",1932:"cdce02d4",1938:"b56621c4",1958:"b09b582c",1969:"7232540e",2020:"7535d00c",2041:"bcfce1ff",2138:"1a4e3797",2151:"55bac7f1",2289:"49ec188d",2340:"e22dd37b",2355:"1136c95f",2372:"8ba0b14e",2384:"448d8494",2395:"cd573875",2440:"997887a4",2487:"9abe0306",2554:"f0a7be2b",2825:"89fd9e76",2849:"7eca411d",2881:"2773c291",2883:"d2c557a5",2885:"bf5678db",2893:"e82058ca",2912:"778292f0",2954:"c414bc73",3017:"6abe9687",3030:"6727d074",3087:"f8837ada",3213:"8cfdc86d",3216:"5158272a",3234:"87ff70ad",3239:"b73968e4",3276:"d8d94b5c",3336:"c4e30bec",3361:"c377a04b",3465:"a33ba820",3466:"d94d4c87",3487:"13dac574",3582:"5edea9bf",3701:"88f07c05",3723:"c75f9093",3782:"7123b015",3822:"59b54398",3823:"efd8aafa",3839:"6b8fde54",3863:"fd366d10",3922:"894aac81",3935:"29b06e33",4011:"ee01c0d2",4088:"3ba08586",4100:"5fb694b3",4244:"f7fdec3a",4291:"749d1be8",4365:"6bb47aa3",4370:"49ec685e",4391:"d95065c8",4420:"c0ceb000",4423:"1f1a3550",4426:"b572c5af",4437:"4733bf47",4560:"483085cf",4634:"d9ab0005",4670:"ae4c0ee2",4691:"ce5795f4",4709:"2e44b5ea",4757:"a21738db",4808:"f17273da",4810:"72032a86",4811:"ce097dff",4835:"6b87b92b",4846:"ec707320",4859:"e21c15d3",4918:"0efd896e",4963:"fd615c45",5023:"ea31ac95",5035:"a36d89ba",5044:"b5a8c0e1",5055:"ee40b307",5059:"bccbf329",5075:"1901b863",5196:"fd5230de",5211:"84ed2c91",5242:"955e0f14",5256:"ddd45ac8",5289:"92b9ac0d",5296:"5e3fdd1e",5333:"45483604",5385:"a1d1dd1b",5418:"760c21a9",5423:"f9345a93",5425:"ff78723e",5445:"e3704d3e",5452:"5c02a21c",5459:"b4a62d96",5468:"333ace74",5472:"f4cea0fd",5501:"1c3a2cc2",5527:"5a1b55cd",5534:"5b464c81",5536:"c0d85328",5574:"8d7b95e3",5579:"dc0829bf",5659:"735f4e8b",5715:"d862c92b",5717:"5a648b40",5718:"791af571",5723:"796c6854",5742:"aba21aa0",5839:"f000fa6c",5858:"108062f4",5868:"7ca8dcb0",5981:"45cfda70",6043:"10598b0c",6054:"20310182",6082:"077e182c",6209:"be23a2ab",6235:"884c101c",6309:"a73fd9a7",6321:"3f015f6c",6329:"68d9e37d",6349:"655ebc95",6466:"ba4c4c42",6584:"3a3d9827",6597:"d4aa3b2e",6615:"820321aa",6689:"6ebbc2a9",6715:"2673cc66",6728:"41cfe910",6750:"e9d57344",6776:"61483c77",6851:"f14e0d42",6944:"e1012b35",6969:"14eb3368",6972:"73bb290b",6980:"4748fea8",7054:"364843de",7098:"a7bd4aaa",7174:"59841b15",7181:"398ec6ec",7185:"3aec8d28",7296:"1190ec46",7328:"7f1a228f",7391:"bcc493bb",7444:"4575aa6b",7466:"283abc1e",7476:"0e046e27",7491:"6315f7a9",7533:"fa4df832",7538:"63e7d659",7606:"7041e121",7644:"a233450e",7670:"45762ba8",7702:"b478df71",7740:"38c0e729",7765:"0eed62d0",7783:"5499eab5",7800:"fd3065b9",7823:"acaa9510",7826:"c9ef35f2",7853:"393ba31b",7900:"a377b775",7983:"b6d05f96",8024:"b213ac14",8029:"1d32a22a",8152:"38b1a18c",8362:"718e3846",8401:"17896441",8467:"590f7409",8493:"00520511",8495:"c6da9900",8648:"a5572c7a",8658:"dff954e4",8694:"63d6513e",8787:"5d4750be",8791:"fea443f9",8792:"a482deb9",8804:"4cacf3e6",8847:"413b7f27",8898:"16d48d9c",8937:"858b8f4c",8958:"93201ccf",9048:"a94703ab",9054:"b41b7274",9122:"17a01669",9136:"4415fef0",9143:"9776f283",9191:"e6557b6f",9202:"3b39eb61",9256:"bf95a5e0",9338:"95f524cc",9357:"453d2cf9",9366:"0fe8a02a",9502:"72ce6c4c",9519:"17721d7a",9538:"f0a0c15c",9552:"cbe58da9",9554:"f6df46a6",9588:"a3713279",9624:"70010fe2",9647:"5e95c892",9659:"77510a09",9665:"a97a69dc",9684:"9b543a4a",9757:"105374d0",9770:"1cd70b93",9840:"82b53ec7",9864:"bcf25bf9",9894:"0d7f7339",9947:"9c1c0c58"}[e]||e)+"."+{168:"d25a5110",204:"3bd2f5af",284:"a37ea219",295:"485df26d",322:"a07193ef",329:"79395793",416:"5a82d981",491:"23dbd36a",503:"574761ce",623:"ef04c9dc",651:"59fa0b12",698:"cabd455a",705:"8866b5bc",832:"838b0688",839:"693e56cf",893:"40c0b766",957:"faee654a",1010:"9f7efd10",1071:"6d89ecea",1135:"8636179d",1245:"cba0b368",1288:"3de8ae49",1312:"f7c23beb",1313:"0b731b7f",1496:"1cf88bae",1511:"0c351a03",1535:"d4663737",1567:"95f0c2bd",1597:"74c6d222",1648:"a1270855",1691:"f84edd20",1736:"84bf22b8",1778:"f6c21911",1807:"e378cce9",1881:"a4b087e3",1932:"ec6ed67f",1938:"9774f52b",1958:"4373f965",1969:"ad7ff009",2020:"b0e18734",2041:"5731a8ac",2138:"b997a4ea",2151:"88d89c4e",2237:"03c1976d",2289:"1ddf7564",2340:"8daefdf6",2355:"b4471e99",2372:"3f61091f",2384:"2c5e2f28",2395:"b6153e9a",2440:"13acb4b8",2487:"03416d34",2554:"5058b793",2825:"7f3329da",2849:"2280c2b6",2881:"21c123eb",2883:"e2b4c9aa",2885:"89fbf3f5",2893:"5eb66d5a",2912:"36bf6a5b",2954:"04fa45a1",3017:"61c6281e",3030:"95612489",3087:"3b653be0",3213:"0d0031e6",3216:"781f76fc",3234:"96b1d246",3239:"0a4977f0",3276:"655ee956",3336:"3acf92be",3361:"bd732838",3465:"f986de47",3466:"99bd854c",3487:"0b60c243",3582:"75ccf611",3701:"4bc5c2e8",3723:"1245786d",3782:"3c3b4ab9",3822:"b61df74f",3823:"589d2c46",3839:"7a0d0ab2",3863:"414be1af",3922:"59c2d27e",3935:"a39d77e2",4011:"6d949b60",4088:"d0f4ba53",4100:"1d898480",4244:"dc979397",4291:"cba4908f",4365:"abeb749d",4370:"a8cece29",4391:"2d5d9274",4420:"26d4b8b3",4423:"551d319e",4426:"ea686c9a",4437:"cb5f0b61",4560:"2b8f6a2b",4634:"af84a087",4670:"42a661cc",4691:"1daed32b",4709:"bf2b42dc",4757:"5de55e65",4808:"57b0e988",4810:"059fb516",4811:"11b33431",4835:"e5e9ea7c",4846:"c6e8da1e",4859:"1f60f7a7",4918:"460fbc6a",4963:"001f3b59",5023:"bcfbb029",5035:"a0a434ce",5044:"64227f3b",5055:"57eaf175",5059:"d1dba9aa",5075:"47be10be",5196:"949b9311",5211:"b0bd002d",5242:"160bc916",5256:"b9448509",5289:"4c73411f",5296:"22dc91c6",5333:"db44fe9c",5385:"a14a72dd",5418:"b320a423",5423:"dc64d462",5425:"dad4e121",5445:"d6486515",5452:"a1e16ce8",5459:"ae1b4adc",5468:"e0fe1744",5472:"531f2cc7",5501:"8f64902d",5527:"ea0922ed",5534:"1adb5d84",5536:"af78df95",5574:"d77cde72",5579:"46ddf16d",5659:"b86d0e6d",5715:"c1f3e964",5717:"9af191f1",5718:"24dfb905",5723:"717c3f47",5742:"ed09cce9",5839:"d8ffab31",5858:"8b89cd67",5868:"08915c29",5981:"5536f522",6043:"1a909002",6054:"433ebfe9",6082:"c263834c",6209:"612e9629",6235:"d34e8cc7",6309:"8e47d530",6321:"65801514",6329:"65061572",6349:"3cbad3b3",6466:"024fc59a",6584:"fcbb2d81",6597:"a5e7e202",6615:"6451c663",6689:"3c7e5dd6",6715:"f3fb0b40",6728:"eba7c961",6750:"f640519e",6776:"477e2eb4",6851:"8e83ae2d",6944:"8c6febe9",6969:"4d27f5f2",6972:"9ebad8c4",6980:"46fbc30b",7054:"c74f29c3",7098:"29aa088f",7174:"7133b9fb",7181:"8508f7dc",7185:"85a972af",7296:"e3a537e1",7328:"f193ae4b",7391:"1717fbc1",7444:"c4b83ca0",7466:"ec525f11",7476:"4f470335",7491:"d07230bb",7533:"b0828b82",7538:"82491d14",7606:"6ede9807",7644:"ec3b5103",7670:"88eb170b",7702:"1baa57d6",7740:"99469a14",7765:"d05672fe",7783:"fb04a8fa",7800:"95182f68",7823:"d9d088d1",7826:"80346936",7853:"d53a881c",7900:"8287d003",7983:"c3b4d691",8024:"0456a911",8029:"c5a04b0a",8152:"5c62980a",8362:"a14c24cb",8401:"66bbdd1f",8467:"b718e4f0",8493:"d1dbc001",8495:"e4bf9175",8648:"d27440b6",8658:"9604adde",8694:"1bb728ea",8787:"a515579c",8791:"447ad865",8792:"68eb394a",8804:"767f5a3c",8847:"59b11c31",8898:"6fcd74a5",8913:"64e5ee35",8937:"dd3f7e68",8958:"8a20905f",9048:"a4bd031d",9054:"474220fe",9122:"deb2817c",9136:"db41fcaa",9143:"34571fbc",9191:"b5601052",9202:"05a2f845",9256:"d62f460e",9338:"62924258",9357:"afa14f88",9366:"a3df22d4",9462:"d587a550",9502:"d642963a",9519:"c92c2d1c",9538:"21904a78",9552:"4986d2b6",9554:"04a8f185",9588:"866fe6ac",9624:"009dc0f3",9647:"1c5eed15",9659:"9889eb19",9665:"0b152b5c",9684:"aad5bc2b",9757:"87194896",9770:"a0a3f8bd",9840:"f264ab06",9864:"bc7412db",9894:"46858e9f",9947:"0ee45e93"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),b={},f="docs:",r.l=(e,a,c,d)=>{if(b[e])b[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=b[e];if(delete b[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",20310182:"6054",45483604:"5333",55771474:"329","0f669020":"168","43cf645b":"204","1c5bdcc0":"284",b34fd168:"295",b1d9ab1e:"322","6a9eda4d":"491","2ef51344":"503","670c12fe":"623",f6ca6b97:"651",bef7336c:"698",d03628f5:"705","362a08a0":"832",bf86ff3c:"839","939cc5d6":"893",c141421f:"957","3e832dc9":"1010","18abd1b1":"1071","00849eb8":"1135","588b3e90":"1245","1573eefc":"1288","85c21da9":"1312",b8a88df5:"1313",a9f8d366:"1496","3e753cd6":"1511","733fd614":"1535","22dd74f7":"1567","3593a311":"1597","1b355885":"1648",d0914994:"1691","0a6d04ec":"1736",e85ca7bd:"1778","859ae2ee":"1807","6bddfb77":"1881",cdce02d4:"1932",b56621c4:"1938",b09b582c:"1958","7232540e":"1969","7535d00c":"2020",bcfce1ff:"2041","1a4e3797":"2138","55bac7f1":"2151","49ec188d":"2289",e22dd37b:"2340","1136c95f":"2355","8ba0b14e":"2372","448d8494":"2384",cd573875:"2395","997887a4":"2440","9abe0306":"2487",f0a7be2b:"2554","89fd9e76":"2825","7eca411d":"2849","2773c291":"2881",d2c557a5:"2883",bf5678db:"2885",e82058ca:"2893","778292f0":"2912",c414bc73:"2954","6abe9687":"3017","6727d074":"3030",f8837ada:"3087","8cfdc86d":"3213","5158272a":"3216","87ff70ad":"3234",b73968e4:"3239",d8d94b5c:"3276",c4e30bec:"3336",c377a04b:"3361",a33ba820:"3465",d94d4c87:"3466","13dac574":"3487","5edea9bf":"3582","88f07c05":"3701",c75f9093:"3723","7123b015":"3782","59b54398":"3822",efd8aafa:"3823","6b8fde54":"3839",fd366d10:"3863","894aac81":"3922","29b06e33":"3935",ee01c0d2:"4011","3ba08586":"4088","5fb694b3":"4100",f7fdec3a:"4244","749d1be8":"4291","6bb47aa3":"4365","49ec685e":"4370",d95065c8:"4391",c0ceb000:"4420","1f1a3550":"4423",b572c5af:"4426","4733bf47":"4437","483085cf":"4560",d9ab0005:"4634",ae4c0ee2:"4670",ce5795f4:"4691","2e44b5ea":"4709",a21738db:"4757",f17273da:"4808","72032a86":"4810",ce097dff:"4811","6b87b92b":"4835",ec707320:"4846",e21c15d3:"4859","0efd896e":"4918",fd615c45:"4963",ea31ac95:"5023",a36d89ba:"5035",b5a8c0e1:"5044",ee40b307:"5055",bccbf329:"5059","1901b863":"5075",fd5230de:"5196","84ed2c91":"5211","955e0f14":"5242",ddd45ac8:"5256","92b9ac0d":"5289","5e3fdd1e":"5296",a1d1dd1b:"5385","760c21a9":"5418",f9345a93:"5423",ff78723e:"5425",e3704d3e:"5445","5c02a21c":"5452",b4a62d96:"5459","333ace74":"5468",f4cea0fd:"5472","1c3a2cc2":"5501","5a1b55cd":"5527","5b464c81":"5534",c0d85328:"5536","8d7b95e3":"5574",dc0829bf:"5579","735f4e8b":"5659",d862c92b:"5715","5a648b40":"5717","791af571":"5718","796c6854":"5723",aba21aa0:"5742",f000fa6c:"5839","108062f4":"5858","7ca8dcb0":"5868","45cfda70":"5981","10598b0c":"6043","077e182c":"6082",be23a2ab:"6209","884c101c":"6235",a73fd9a7:"6309","3f015f6c":"6321","68d9e37d":"6329","655ebc95":"6349",ba4c4c42:"6466","3a3d9827":"6584",d4aa3b2e:"6597","820321aa":"6615","6ebbc2a9":"6689","2673cc66":"6715","41cfe910":"6728",e9d57344:"6750","61483c77":"6776",f14e0d42:"6851",e1012b35:"6944","14eb3368":"6969","73bb290b":"6972","4748fea8":"6980","364843de":"7054",a7bd4aaa:"7098","59841b15":"7174","398ec6ec":"7181","3aec8d28":"7185","1190ec46":"7296","7f1a228f":"7328",bcc493bb:"7391","4575aa6b":"7444","283abc1e":"7466","0e046e27":"7476","6315f7a9":"7491",fa4df832:"7533","63e7d659":"7538","7041e121":"7606",a233450e:"7644","45762ba8":"7670",b478df71:"7702","38c0e729":"7740","0eed62d0":"7765","5499eab5":"7783",fd3065b9:"7800",acaa9510:"7823",c9ef35f2:"7826","393ba31b":"7853",a377b775:"7900",b6d05f96:"7983",b213ac14:"8024","1d32a22a":"8029","38b1a18c":"8152","718e3846":"8362","590f7409":"8467","00520511":"8493",c6da9900:"8495",a5572c7a:"8648",dff954e4:"8658","63d6513e":"8694","5d4750be":"8787",fea443f9:"8791",a482deb9:"8792","4cacf3e6":"8804","413b7f27":"8847","16d48d9c":"8898","858b8f4c":"8937","93201ccf":"8958",a94703ab:"9048",b41b7274:"9054","17a01669":"9122","4415fef0":"9136","9776f283":"9143",e6557b6f:"9191","3b39eb61":"9202",bf95a5e0:"9256","95f524cc":"9338","453d2cf9":"9357","0fe8a02a":"9366","72ce6c4c":"9502","17721d7a":"9519",f0a0c15c:"9538",cbe58da9:"9552",f6df46a6:"9554",a3713279:"9588","70010fe2":"9624","5e95c892":"9647","77510a09":"9659",a97a69dc:"9665","9b543a4a":"9684","105374d0":"9757","1cd70b93":"9770","82b53ec7":"9840",bcf25bf9:"9864","0d7f7339":"9894","9c1c0c58":"9947"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var b=r.o(e,a)?e[a]:void 0;if(0!==b)if(b)c.push(b[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>b=e[a]=[c,f]));c.push(b[2]=f);var d=r.p+r.u(a),t=new Error;r.l(d,(c=>{if(r.o(e,a)&&(0!==(b=e[a])&&(e[a]=void 0),b)){var f=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+d+")",t.name="ChunkLoadError",t.type=f,t.request=d,b[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var b,f,d=c[0],t=c[1],o=c[2],n=0;if(d.some((a=>0!==e[a]))){for(b in t)r.o(t,b)&&(r.m[b]=t[b]);if(o)var i=o(r)}for(a&&a(c);n{"use strict";var e,a,c,b,f,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return d[e].call(c.exports,c,c.exports,r),c.exports}r.m=d,e=[],r.O=(a,c,b,f)=>{if(!c){var d=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,b,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,b){if(1&b&&(e=this(e)),8&b)return e;if("object"==typeof e&&e){if(4&b&&e.__esModule)return e;if(16&b&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var d={};a=a||[null,c({}),c([]),c(c)];for(var t=2&b&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,r.d(f,d),f},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({168:"0f669020",204:"43cf645b",284:"1c5bdcc0",295:"b34fd168",322:"b1d9ab1e",329:"55771474",491:"6a9eda4d",503:"2ef51344",623:"670c12fe",651:"f6ca6b97",698:"bef7336c",705:"d03628f5",832:"362a08a0",839:"bf86ff3c",893:"939cc5d6",957:"c141421f",1010:"3e832dc9",1071:"18abd1b1",1135:"00849eb8",1245:"588b3e90",1288:"1573eefc",1312:"85c21da9",1313:"b8a88df5",1496:"a9f8d366",1511:"3e753cd6",1535:"733fd614",1567:"22dd74f7",1597:"3593a311",1648:"1b355885",1691:"d0914994",1736:"0a6d04ec",1778:"e85ca7bd",1807:"859ae2ee",1881:"6bddfb77",1932:"cdce02d4",1938:"b56621c4",1958:"b09b582c",1969:"7232540e",2020:"7535d00c",2041:"bcfce1ff",2138:"1a4e3797",2151:"55bac7f1",2289:"49ec188d",2340:"e22dd37b",2355:"1136c95f",2372:"8ba0b14e",2384:"448d8494",2395:"cd573875",2440:"997887a4",2487:"9abe0306",2554:"f0a7be2b",2825:"89fd9e76",2849:"7eca411d",2881:"2773c291",2883:"d2c557a5",2885:"bf5678db",2893:"e82058ca",2912:"778292f0",2954:"c414bc73",3017:"6abe9687",3030:"6727d074",3087:"f8837ada",3213:"8cfdc86d",3216:"5158272a",3234:"87ff70ad",3239:"b73968e4",3276:"d8d94b5c",3336:"c4e30bec",3361:"c377a04b",3465:"a33ba820",3466:"d94d4c87",3487:"13dac574",3582:"5edea9bf",3701:"88f07c05",3723:"c75f9093",3782:"7123b015",3822:"59b54398",3823:"efd8aafa",3839:"6b8fde54",3863:"fd366d10",3922:"894aac81",3935:"29b06e33",4011:"ee01c0d2",4088:"3ba08586",4100:"5fb694b3",4244:"f7fdec3a",4291:"749d1be8",4365:"6bb47aa3",4370:"49ec685e",4391:"d95065c8",4420:"c0ceb000",4423:"1f1a3550",4426:"b572c5af",4437:"4733bf47",4560:"483085cf",4634:"d9ab0005",4670:"ae4c0ee2",4691:"ce5795f4",4709:"2e44b5ea",4757:"a21738db",4808:"f17273da",4810:"72032a86",4811:"ce097dff",4835:"6b87b92b",4846:"ec707320",4859:"e21c15d3",4918:"0efd896e",4963:"fd615c45",5023:"ea31ac95",5035:"a36d89ba",5044:"b5a8c0e1",5055:"ee40b307",5059:"bccbf329",5075:"1901b863",5196:"fd5230de",5211:"84ed2c91",5242:"955e0f14",5256:"ddd45ac8",5289:"92b9ac0d",5296:"5e3fdd1e",5333:"45483604",5385:"a1d1dd1b",5418:"760c21a9",5423:"f9345a93",5425:"ff78723e",5445:"e3704d3e",5452:"5c02a21c",5459:"b4a62d96",5468:"333ace74",5472:"f4cea0fd",5501:"1c3a2cc2",5527:"5a1b55cd",5534:"5b464c81",5536:"c0d85328",5574:"8d7b95e3",5579:"dc0829bf",5659:"735f4e8b",5715:"d862c92b",5717:"5a648b40",5718:"791af571",5723:"796c6854",5742:"aba21aa0",5839:"f000fa6c",5858:"108062f4",5868:"7ca8dcb0",5981:"45cfda70",6043:"10598b0c",6054:"20310182",6082:"077e182c",6209:"be23a2ab",6235:"884c101c",6309:"a73fd9a7",6321:"3f015f6c",6329:"68d9e37d",6349:"655ebc95",6466:"ba4c4c42",6584:"3a3d9827",6597:"d4aa3b2e",6615:"820321aa",6689:"6ebbc2a9",6715:"2673cc66",6728:"41cfe910",6750:"e9d57344",6776:"61483c77",6851:"f14e0d42",6944:"e1012b35",6969:"14eb3368",6972:"73bb290b",6980:"4748fea8",7054:"364843de",7098:"a7bd4aaa",7174:"59841b15",7181:"398ec6ec",7185:"3aec8d28",7296:"1190ec46",7328:"7f1a228f",7391:"bcc493bb",7444:"4575aa6b",7466:"283abc1e",7476:"0e046e27",7491:"6315f7a9",7533:"fa4df832",7538:"63e7d659",7606:"7041e121",7644:"a233450e",7670:"45762ba8",7702:"b478df71",7740:"38c0e729",7765:"0eed62d0",7783:"5499eab5",7800:"fd3065b9",7823:"acaa9510",7826:"c9ef35f2",7853:"393ba31b",7900:"a377b775",7983:"b6d05f96",8024:"b213ac14",8029:"1d32a22a",8152:"38b1a18c",8362:"718e3846",8401:"17896441",8467:"590f7409",8493:"00520511",8495:"c6da9900",8648:"a5572c7a",8658:"dff954e4",8694:"63d6513e",8787:"5d4750be",8791:"fea443f9",8792:"a482deb9",8804:"4cacf3e6",8847:"413b7f27",8898:"16d48d9c",8937:"858b8f4c",8958:"93201ccf",9048:"a94703ab",9054:"b41b7274",9122:"17a01669",9136:"4415fef0",9143:"9776f283",9191:"e6557b6f",9202:"3b39eb61",9256:"bf95a5e0",9338:"95f524cc",9357:"453d2cf9",9366:"0fe8a02a",9502:"72ce6c4c",9519:"17721d7a",9538:"f0a0c15c",9552:"cbe58da9",9554:"f6df46a6",9588:"a3713279",9624:"70010fe2",9647:"5e95c892",9659:"77510a09",9665:"a97a69dc",9684:"9b543a4a",9757:"105374d0",9770:"1cd70b93",9840:"82b53ec7",9864:"bcf25bf9",9894:"0d7f7339",9947:"9c1c0c58"}[e]||e)+"."+{168:"d25a5110",204:"3bd2f5af",284:"a37ea219",295:"485df26d",322:"a07193ef",329:"79395793",416:"5a82d981",491:"23dbd36a",503:"574761ce",623:"ef04c9dc",651:"59fa0b12",698:"cabd455a",705:"8866b5bc",832:"838b0688",839:"693e56cf",893:"40c0b766",957:"faee654a",1010:"9f7efd10",1071:"6d89ecea",1135:"8636179d",1245:"cba0b368",1288:"3de8ae49",1312:"f7c23beb",1313:"0b731b7f",1496:"1cf88bae",1511:"0c351a03",1535:"d4663737",1567:"95f0c2bd",1597:"74c6d222",1648:"a1270855",1691:"f84edd20",1736:"84bf22b8",1778:"f6c21911",1807:"e378cce9",1881:"a4b087e3",1932:"ec6ed67f",1938:"9774f52b",1958:"4373f965",1969:"ad7ff009",2020:"b0e18734",2041:"5731a8ac",2138:"b997a4ea",2151:"88d89c4e",2237:"03c1976d",2289:"1ddf7564",2340:"8daefdf6",2355:"b4471e99",2372:"3f61091f",2384:"2c5e2f28",2395:"b6153e9a",2440:"13acb4b8",2487:"03416d34",2554:"5058b793",2825:"7f3329da",2849:"2280c2b6",2881:"21c123eb",2883:"e2b4c9aa",2885:"89fbf3f5",2893:"eedc3c6a",2912:"36bf6a5b",2954:"04fa45a1",3017:"61c6281e",3030:"95612489",3087:"3b653be0",3213:"0d0031e6",3216:"781f76fc",3234:"96b1d246",3239:"0a4977f0",3276:"655ee956",3336:"3acf92be",3361:"bd732838",3465:"f986de47",3466:"99bd854c",3487:"0b60c243",3582:"75ccf611",3701:"4bc5c2e8",3723:"1245786d",3782:"3c3b4ab9",3822:"b61df74f",3823:"589d2c46",3839:"7a0d0ab2",3863:"414be1af",3922:"59c2d27e",3935:"a39d77e2",4011:"6d949b60",4088:"d0f4ba53",4100:"1d898480",4244:"dc979397",4291:"cba4908f",4365:"abeb749d",4370:"a8cece29",4391:"2d5d9274",4420:"26d4b8b3",4423:"551d319e",4426:"ea686c9a",4437:"cb5f0b61",4560:"2b8f6a2b",4634:"af84a087",4670:"42a661cc",4691:"1daed32b",4709:"bf2b42dc",4757:"5de55e65",4808:"57b0e988",4810:"059fb516",4811:"11b33431",4835:"e5e9ea7c",4846:"c6e8da1e",4859:"1f60f7a7",4918:"460fbc6a",4963:"0240e017",5023:"bcfbb029",5035:"a0a434ce",5044:"64227f3b",5055:"57eaf175",5059:"d1dba9aa",5075:"47be10be",5196:"949b9311",5211:"b0bd002d",5242:"160bc916",5256:"b9448509",5289:"4c73411f",5296:"22dc91c6",5333:"db44fe9c",5385:"a14a72dd",5418:"b320a423",5423:"dc64d462",5425:"071aa9ae",5445:"d6486515",5452:"a1e16ce8",5459:"ae1b4adc",5468:"e0fe1744",5472:"531f2cc7",5501:"8f64902d",5527:"ea0922ed",5534:"1adb5d84",5536:"af78df95",5574:"d77cde72",5579:"46ddf16d",5659:"b86d0e6d",5715:"c1f3e964",5717:"9af191f1",5718:"24dfb905",5723:"717c3f47",5742:"ed09cce9",5839:"d8ffab31",5858:"8b89cd67",5868:"08915c29",5981:"5536f522",6043:"1a909002",6054:"433ebfe9",6082:"c263834c",6209:"612e9629",6235:"d34e8cc7",6309:"8e47d530",6321:"65801514",6329:"65061572",6349:"3cbad3b3",6466:"024fc59a",6584:"fcbb2d81",6597:"a5e7e202",6615:"6451c663",6689:"3c7e5dd6",6715:"f3fb0b40",6728:"eba7c961",6750:"f640519e",6776:"477e2eb4",6851:"8e83ae2d",6944:"8c6febe9",6969:"4d27f5f2",6972:"9ebad8c4",6980:"46fbc30b",7054:"c74f29c3",7098:"29aa088f",7174:"7133b9fb",7181:"8508f7dc",7185:"85a972af",7296:"e3a537e1",7328:"f193ae4b",7391:"1717fbc1",7444:"c4b83ca0",7466:"ec525f11",7476:"4f470335",7491:"d07230bb",7533:"b0828b82",7538:"82491d14",7606:"6ede9807",7644:"ec3b5103",7670:"88eb170b",7702:"1baa57d6",7740:"99469a14",7765:"d05672fe",7783:"fb04a8fa",7800:"95182f68",7823:"d9d088d1",7826:"80346936",7853:"d53a881c",7900:"8287d003",7983:"c3b4d691",8024:"0456a911",8029:"c5a04b0a",8152:"5c62980a",8362:"a14c24cb",8401:"66bbdd1f",8467:"b718e4f0",8493:"d1dbc001",8495:"e4bf9175",8648:"d27440b6",8658:"9604adde",8694:"1bb728ea",8787:"a515579c",8791:"447ad865",8792:"68eb394a",8804:"767f5a3c",8847:"59b11c31",8898:"6fcd74a5",8913:"64e5ee35",8937:"dd3f7e68",8958:"8a20905f",9048:"a4bd031d",9054:"474220fe",9122:"deb2817c",9136:"db41fcaa",9143:"34571fbc",9191:"b5601052",9202:"05a2f845",9256:"d62f460e",9338:"62924258",9357:"afa14f88",9366:"a3df22d4",9462:"d587a550",9502:"d642963a",9519:"c92c2d1c",9538:"21904a78",9552:"4986d2b6",9554:"04a8f185",9588:"866fe6ac",9624:"009dc0f3",9647:"1c5eed15",9659:"9889eb19",9665:"0b152b5c",9684:"aad5bc2b",9757:"87194896",9770:"a0a3f8bd",9840:"f264ab06",9864:"bc7412db",9894:"46858e9f",9947:"0ee45e93"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),b={},f="docs:",r.l=(e,a,c,d)=>{if(b[e])b[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=b[e];if(delete b[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",20310182:"6054",45483604:"5333",55771474:"329","0f669020":"168","43cf645b":"204","1c5bdcc0":"284",b34fd168:"295",b1d9ab1e:"322","6a9eda4d":"491","2ef51344":"503","670c12fe":"623",f6ca6b97:"651",bef7336c:"698",d03628f5:"705","362a08a0":"832",bf86ff3c:"839","939cc5d6":"893",c141421f:"957","3e832dc9":"1010","18abd1b1":"1071","00849eb8":"1135","588b3e90":"1245","1573eefc":"1288","85c21da9":"1312",b8a88df5:"1313",a9f8d366:"1496","3e753cd6":"1511","733fd614":"1535","22dd74f7":"1567","3593a311":"1597","1b355885":"1648",d0914994:"1691","0a6d04ec":"1736",e85ca7bd:"1778","859ae2ee":"1807","6bddfb77":"1881",cdce02d4:"1932",b56621c4:"1938",b09b582c:"1958","7232540e":"1969","7535d00c":"2020",bcfce1ff:"2041","1a4e3797":"2138","55bac7f1":"2151","49ec188d":"2289",e22dd37b:"2340","1136c95f":"2355","8ba0b14e":"2372","448d8494":"2384",cd573875:"2395","997887a4":"2440","9abe0306":"2487",f0a7be2b:"2554","89fd9e76":"2825","7eca411d":"2849","2773c291":"2881",d2c557a5:"2883",bf5678db:"2885",e82058ca:"2893","778292f0":"2912",c414bc73:"2954","6abe9687":"3017","6727d074":"3030",f8837ada:"3087","8cfdc86d":"3213","5158272a":"3216","87ff70ad":"3234",b73968e4:"3239",d8d94b5c:"3276",c4e30bec:"3336",c377a04b:"3361",a33ba820:"3465",d94d4c87:"3466","13dac574":"3487","5edea9bf":"3582","88f07c05":"3701",c75f9093:"3723","7123b015":"3782","59b54398":"3822",efd8aafa:"3823","6b8fde54":"3839",fd366d10:"3863","894aac81":"3922","29b06e33":"3935",ee01c0d2:"4011","3ba08586":"4088","5fb694b3":"4100",f7fdec3a:"4244","749d1be8":"4291","6bb47aa3":"4365","49ec685e":"4370",d95065c8:"4391",c0ceb000:"4420","1f1a3550":"4423",b572c5af:"4426","4733bf47":"4437","483085cf":"4560",d9ab0005:"4634",ae4c0ee2:"4670",ce5795f4:"4691","2e44b5ea":"4709",a21738db:"4757",f17273da:"4808","72032a86":"4810",ce097dff:"4811","6b87b92b":"4835",ec707320:"4846",e21c15d3:"4859","0efd896e":"4918",fd615c45:"4963",ea31ac95:"5023",a36d89ba:"5035",b5a8c0e1:"5044",ee40b307:"5055",bccbf329:"5059","1901b863":"5075",fd5230de:"5196","84ed2c91":"5211","955e0f14":"5242",ddd45ac8:"5256","92b9ac0d":"5289","5e3fdd1e":"5296",a1d1dd1b:"5385","760c21a9":"5418",f9345a93:"5423",ff78723e:"5425",e3704d3e:"5445","5c02a21c":"5452",b4a62d96:"5459","333ace74":"5468",f4cea0fd:"5472","1c3a2cc2":"5501","5a1b55cd":"5527","5b464c81":"5534",c0d85328:"5536","8d7b95e3":"5574",dc0829bf:"5579","735f4e8b":"5659",d862c92b:"5715","5a648b40":"5717","791af571":"5718","796c6854":"5723",aba21aa0:"5742",f000fa6c:"5839","108062f4":"5858","7ca8dcb0":"5868","45cfda70":"5981","10598b0c":"6043","077e182c":"6082",be23a2ab:"6209","884c101c":"6235",a73fd9a7:"6309","3f015f6c":"6321","68d9e37d":"6329","655ebc95":"6349",ba4c4c42:"6466","3a3d9827":"6584",d4aa3b2e:"6597","820321aa":"6615","6ebbc2a9":"6689","2673cc66":"6715","41cfe910":"6728",e9d57344:"6750","61483c77":"6776",f14e0d42:"6851",e1012b35:"6944","14eb3368":"6969","73bb290b":"6972","4748fea8":"6980","364843de":"7054",a7bd4aaa:"7098","59841b15":"7174","398ec6ec":"7181","3aec8d28":"7185","1190ec46":"7296","7f1a228f":"7328",bcc493bb:"7391","4575aa6b":"7444","283abc1e":"7466","0e046e27":"7476","6315f7a9":"7491",fa4df832:"7533","63e7d659":"7538","7041e121":"7606",a233450e:"7644","45762ba8":"7670",b478df71:"7702","38c0e729":"7740","0eed62d0":"7765","5499eab5":"7783",fd3065b9:"7800",acaa9510:"7823",c9ef35f2:"7826","393ba31b":"7853",a377b775:"7900",b6d05f96:"7983",b213ac14:"8024","1d32a22a":"8029","38b1a18c":"8152","718e3846":"8362","590f7409":"8467","00520511":"8493",c6da9900:"8495",a5572c7a:"8648",dff954e4:"8658","63d6513e":"8694","5d4750be":"8787",fea443f9:"8791",a482deb9:"8792","4cacf3e6":"8804","413b7f27":"8847","16d48d9c":"8898","858b8f4c":"8937","93201ccf":"8958",a94703ab:"9048",b41b7274:"9054","17a01669":"9122","4415fef0":"9136","9776f283":"9143",e6557b6f:"9191","3b39eb61":"9202",bf95a5e0:"9256","95f524cc":"9338","453d2cf9":"9357","0fe8a02a":"9366","72ce6c4c":"9502","17721d7a":"9519",f0a0c15c:"9538",cbe58da9:"9552",f6df46a6:"9554",a3713279:"9588","70010fe2":"9624","5e95c892":"9647","77510a09":"9659",a97a69dc:"9665","9b543a4a":"9684","105374d0":"9757","1cd70b93":"9770","82b53ec7":"9840",bcf25bf9:"9864","0d7f7339":"9894","9c1c0c58":"9947"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var b=r.o(e,a)?e[a]:void 0;if(0!==b)if(b)c.push(b[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>b=e[a]=[c,f]));c.push(b[2]=f);var d=r.p+r.u(a),t=new Error;r.l(d,(c=>{if(r.o(e,a)&&(0!==(b=e[a])&&(e[a]=void 0),b)){var f=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+d+")",t.name="ChunkLoadError",t.type=f,t.request=d,b[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var b,f,d=c[0],t=c[1],o=c[2],n=0;if(d.some((a=>0!==e[a]))){for(b in t)r.o(t,b)&&(r.m[b]=t[b]);if(o)var i=o(r)}for(a&&a(c);n Benchmarking | Skytable - + diff --git a/blueql/dcl/index.html b/blueql/dcl/index.html index 6f1cdb93a..96dd5c2a4 100644 --- a/blueql/dcl/index.html +++ b/blueql/dcl/index.html @@ -4,7 +4,7 @@ DCL | Skytable - + diff --git a/blueql/ddl/index.html b/blueql/ddl/index.html index 89ac610aa..a1a196a0d 100644 --- a/blueql/ddl/index.html +++ b/blueql/ddl/index.html @@ -4,7 +4,7 @@ DDL | Skytable - + @@ -87,7 +87,7 @@

DROP SPACE
  • A non-empty space cannot be dropped -To avoid catastrophic DROPs, a SPACE can only be dropped directly if it is non-empty. To drop a non-empty space, you must +To avoid catastrophic DROPs, a SPACE can only be dropped directly if it is empty. To drop a non-empty space, you must run:

    DROP SPACE ALLOW NOT EMPTY <space_name>
  • diff --git a/blueql/dml/index.html b/blueql/dml/index.html index 3e0ca0b2e..3d2fd5aa1 100644 --- a/blueql/dml/index.html +++ b/blueql/dml/index.html @@ -4,7 +4,7 @@ DML | Skytable - + diff --git a/blueql/index.html b/blueql/index.html index b8b6597a1..12e1bb38b 100644 --- a/blueql/index.html +++ b/blueql/index.html @@ -4,7 +4,7 @@ BlueQL | Skytable - + diff --git a/blueql/overview/index.html b/blueql/overview/index.html index 910205044..c64fc56b8 100644 --- a/blueql/overview/index.html +++ b/blueql/overview/index.html @@ -4,7 +4,7 @@ Overview | Skytable - + @@ -101,7 +101,7 @@

    ParametersAll literals apart from dictionaries and lists must be used as parameters. BlueQL only allows literals as parameters. For example, using the Rust client, if you were to run this:

    insert into myspace.mymodel('sayan', 'pass123', ['myfirstnote'])

    You are required to parameterize the query like this:

    -
    use skytable::query;

    let query = query!("insert into myspace.mymode(?, ?, [?])", "sayan", "pass123", "myfirstnote")
    +
    use skytable::query;

    let query = query!("insert into myspace.mymodel(?, ?, [?])", "sayan", "pass123", "myfirstnote")

    If you try to run it without any parameters (don't forget that skysh automatically parameterizes for convenience) the query won't even compile.

    tip

    Just so you know, parameterizing involves passing a separate parameter list, with each parameter encoded. You wouldn't need to worry about this because the client driver does all of that for you!

    The question is why? The answer is security. SQL-injection vulernabilties have already costed companies a lot, so we don't @@ -146,7 +146,7 @@

    DMLINSERT INTO myspace.mymodel(...)
  • SELECT col1, ... FROM myspace.mymodel WHERE ...
  • UPDATE myspace.mymodel SET counter += 1 WHERE ...
  • -
  • DELETE FROM myspace.mymode WHERE ...
  • +
  • DELETE FROM myspace.mymodel WHERE ...
  • DCL

    Queries include:

    diff --git a/deployment/index.html b/deployment/index.html index 62dd9e569..4a0df491f 100644 --- a/deployment/index.html +++ b/deployment/index.html @@ -4,7 +4,7 @@ Deployment | Skytable - + diff --git a/index.html b/index.html index eade4ed9d..c39397303 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ Introduction | Skytable - + diff --git a/installation/index.html b/installation/index.html index 7d0f9c8ae..ce218b318 100644 --- a/installation/index.html +++ b/installation/index.html @@ -4,7 +4,7 @@ Installation | Skytable - + diff --git a/libraries/index.html b/libraries/index.html index bfb11f055..831cff38b 100644 --- a/libraries/index.html +++ b/libraries/index.html @@ -4,7 +4,7 @@ Client drivers | Skytable - + diff --git a/limits/index.html b/limits/index.html index ad6e576f3..f4b183610 100644 --- a/limits/index.html +++ b/limits/index.html @@ -4,7 +4,7 @@ Limits | Skytable - + diff --git a/protocol/errors/index.html b/protocol/errors/index.html index 0c16e671f..d18489ac3 100644 --- a/protocol/errors/index.html +++ b/protocol/errors/index.html @@ -4,7 +4,7 @@ Error Index | Skytable - + diff --git a/protocol/index.html b/protocol/index.html index 90f096c47..8db1a0bc0 100644 --- a/protocol/index.html +++ b/protocol/index.html @@ -4,7 +4,7 @@ Skyhash 2: Overview | Skytable - + diff --git a/protocol/specification/index.html b/protocol/specification/index.html index 9d6fae0a3..84d5609ae 100644 --- a/protocol/specification/index.html +++ b/protocol/specification/index.html @@ -4,7 +4,7 @@ Specification | Skytable - + diff --git a/querying/index.html b/querying/index.html index db908c777..5363f1275 100644 --- a/querying/index.html +++ b/querying/index.html @@ -4,7 +4,7 @@ Querying | Skytable - + diff --git a/resources/migration/index.html b/resources/migration/index.html index db3428769..66d217500 100644 --- a/resources/migration/index.html +++ b/resources/migration/index.html @@ -4,7 +4,7 @@ Migrating from an older release | Skytable - + diff --git a/resources/platform-support/index.html b/resources/platform-support/index.html index 28c94e923..569a4acc1 100644 --- a/resources/platform-support/index.html +++ b/resources/platform-support/index.html @@ -4,7 +4,7 @@ Platform Support | Skytable - + diff --git a/resources/useful-links/index.html b/resources/useful-links/index.html index d5a0ac089..c7c3771f6 100644 --- a/resources/useful-links/index.html +++ b/resources/useful-links/index.html @@ -4,7 +4,7 @@ Useful links | Skytable - + diff --git a/search/index.html b/search/index.html index 9dbc0453e..883f940d1 100644 --- a/search/index.html +++ b/search/index.html @@ -4,7 +4,7 @@ Search the documentation | Skytable - + diff --git a/system/backup-and-restore/index.html b/system/backup-and-restore/index.html index b13341654..d77a43aa5 100644 --- a/system/backup-and-restore/index.html +++ b/system/backup-and-restore/index.html @@ -4,7 +4,7 @@ Backup and restore | Skytable - + diff --git a/system/configuration/index.html b/system/configuration/index.html index 9da0bda1b..894c5de8b 100644 --- a/system/configuration/index.html +++ b/system/configuration/index.html @@ -4,7 +4,7 @@ Configuration | Skytable - + diff --git a/system/disk-usage/index.html b/system/disk-usage/index.html index 1f4f94de9..34e372839 100644 --- a/system/disk-usage/index.html +++ b/system/disk-usage/index.html @@ -4,7 +4,7 @@ Disk usage | Skytable - + diff --git a/system/global-management/index.html b/system/global-management/index.html index adb4e9bb2..f8b207682 100644 --- a/system/global-management/index.html +++ b/system/global-management/index.html @@ -4,7 +4,7 @@ Global management | Skytable - + diff --git a/system/index.html b/system/index.html index a6e9152be..317a1b93c 100644 --- a/system/index.html +++ b/system/index.html @@ -4,7 +4,7 @@ System administration | Skytable - + diff --git a/system/recovery/index.html b/system/recovery/index.html index 3298060f6..9aee19f8c 100644 --- a/system/recovery/index.html +++ b/system/recovery/index.html @@ -4,7 +4,7 @@ Data recovery | Skytable - + diff --git a/system/user-management/index.html b/system/user-management/index.html index 3de8be079..4f10bc89a 100644 --- a/system/user-management/index.html +++ b/system/user-management/index.html @@ -4,7 +4,7 @@ User management | Skytable - + diff --git a/using-the-repl/index.html b/using-the-repl/index.html index baaee1256..d571bcde8 100644 --- a/using-the-repl/index.html +++ b/using-the-repl/index.html @@ -4,7 +4,7 @@ Using the REPL | Skytable - + diff --git a/versions/index.html b/versions/index.html index 23da95247..bdc4a7df2 100644 --- a/versions/index.html +++ b/versions/index.html @@ -4,7 +4,7 @@ All versions | Skytable - +