From: Kirill Yukhin <kyukhin@tarantool.org> To: v.shpilevoy@tarantool.org Cc: tarantool-patches@freelists.org, Kirill Yukhin <kyukhin@tarantool.org> Subject: [tarantool-patches] [PATCH 1/3] Add value field to _schema space Date: Thu, 29 Mar 2018 09:42:06 +0300 [thread overview] Message-ID: <96cf96edda40dbc76838d742c32a97409c81bb5f.1522303843.git.kyukhin@tarantool.org> (raw) In-Reply-To: <cover.1522303843.git.kyukhin@tarantool.org> In-Reply-To: <cover.1522303843.git.kyukhin@tarantool.org> _schema represented as key-value storage for various values common for Tarantool, like next id for space creation. SQL requires format to be fully specified for columns being access. Unfortunatelly, _schema is inserted into _space before _space's format is set and since DD triggers are disabled during upgrade, format for _schema tuple in _space stays the same. So, set value nullable field in upgrade, regenerate initial snap, update tests. Also, as far as _schema's tuple in _space is not updated: relax fieldno check in sql.c --- src/box/bootstrap.snap | Bin 1638 -> 1657 bytes src/box/lua/upgrade.lua | 14 ++++++++++++-- src/box/sql.c | 5 ++--- test/box-py/bootstrap.result | 3 ++- test/box/access_misc.result | 3 ++- test/xlog/upgrade.result | 3 ++- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap index cf481f9a708e29f680d074ddf755ef6659cdadd4..783aa88995318726e7a93a403a729210d18a39c9 100644 GIT binary patch literal 1657 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 D_yrEc literal 1638 zcmV-s2ATO&PC-x#FfK7O3RY!ub7^mGIv_DFI4(0SGcq|XXJRvDWH>NoWH<^*ZgX^D zZewLSAT?t+Fk&`lW-T*gIc6<1WjHu3Ib$_8Eihp;VmC2mVmLB4H40WkY;R+0Iv{&} z3JTS_3%bn(>;TRrd}U9i0000004TLD{QyuMF92#l7!F6^*th|3gfPY!V+g{|Vd9WO z<bH2NiNe7cmm8S;mG~QIWy(Y;$+~PQx$>-uIW^+64IUcKZAzsJYwU7Yoz$-)G?Nii zN-50%!vNO+1Msb9nOiacOHwxGj~r*^>vzp>$Q0CE+@6~?a5Kr-;pF~#9LcY1VnG75 zkeF^|E))6g-_LaU`m!9IAr<GhbSup*&H8*tvn|#K$rcKLZ#`c<w{|aStS@rizpoM5 zU)SUUz_*@5l;}_aBW5*7ew&*#yR(5XzV!q^z;bf?u3fYv_}25s`hdH`$*q~ix1Ojl z#i>+Y49J;OCD03VNoNmLQl(TON--!e6{<v}GGOWYdvp9~=+<IuwbGK4rN==L9!svw zQ~_{nPF>B)IB@M=t{UK5Pc7<kyLK;my8r1Q9@(Qc`FZXl&9!^krIup=>)M;A7JTc; z`euf8?aeN=rUgenZicRIW=RV0t*805Kk{)i>{2^Qu(KiPxlDI#2S<Z^cQgBP0N;9= zV|JzJ&tUh&QZRsTJ$cq6NqXb=(yT9k>F@db6esiDighjO&o`~q-^-G4ZQ5wx@mQAv zH+sAL%hOyP&58)*-gBB;oeXDU9>er=ll(ex)I03qTjY9%M1Q&T-OPpp0Z=1ARG>dn z)NIX6jSLNn7bmQY37HZr5~~rb6*{{dS2-2F^~9(VE_I4Ip-v)9AxtNei3EZKLn@6v zj6C35Pn}VRjf8Ha7Y^vl2A0n(3L0E8xL|O(AlgJPA`AD1Dp*u!iVaZ+xmXLDfNwoP z5-O@gMVmI8n=>L>_b;n0)@NsX5#d|Up2z%^t?Xyu$YVB|$97OaLf^}9z#SXCA3Od0 zeK*?pu8I8-0n|Tt&9&J1?WD&D6k7uU-+H1yf86Z9<FPak@U5pP?*6-)eF4I^o+cVG zst}x~Pbv?UO{G-Kw<>X*MwP<VC!!RFDbK`xF&VH}bd%{}fyWLRtmD$uta6-ikZx=? ztf&UQ^}HbKlU^E@lly<%3~SfIHg3kx&yN*O2EO$SRqeZWZEn_L+-hMPN7Hp_`qWy0 z@$IqHy~pAgdL+B-+oNZeGkam1$pzmnFsIhGz_*?z#E@0K{5TV%#pmIM4}J5Z@l9on z8|`Abq?|I#m&(lgc!+fEP1*O_6jNJan~4R!^_<ZmBWB5vZ<wyV2?K*edQq%}ZKD+d zfi<Y%RAi76m;nF)0Z;((1xG38Y#tJTz&MKIFpPm1hGPH>;sQqiATS6Chyc|Bm@I2T zFV+AyjGK5Fx+20r^o_mIH~Pv253pN{QKuG<n%E=c*c>ZFVhs#*0*FB0by&fH<x`S~ zOCNZmby+y0BJsrRC5E3i)IW3F&mC=_IL)b4BdXHj;LpnXa{#{`+)y^&KQ9deLQfO9 zYN%?GNSo>FzM!F50Ksn8J6k3g0s9y3)N9W6qSCA|h$3~gU)$%r^Nr&jSMzAhMQxNo zA155((@dqaReqgO>9G7dqtam+FS<BcA2)POKH&-(4&fru;B@jOCo2Vpq8(@$K<F;| zE+5XQY*>DsQR#RhBZamXb~e!4oT@U{)Y}cj?p{PERKofHxPkB4_!j^Cx}narG|`Ip z?VDZvKik&Tx$cbK4r<s98%mQzpY<<i`X5r{$>p3Lo){Va-}yrUkKyQ%b<Tl#|9BZS z{u25i3DsO<5!N`?lFRsn`d~DKYiVqfq=7*=?MqFcY7Esh=V{n1M!6*C%pu&1c%K;k z)vey1eWB&_NZ>AQd{bqz*piMCE;kba40;qA3~*E{Kj=~82}9x$c-qDqWjfY`U0hOZ z4nVnvT`LqH4@U?0Ta5N!oFW^fXN?1pTkxqOKUo$)Qkc)LBx{;xIj5m|cxX+XFxRc< zbwTYi@DzF7q%zH;8T}Cq7IBg2Cp?J?SM7&nziI7U6)>wALgIhU54CWu6!m6b3(#7P k&cB;FNloBtT%ms(>pViJVcFJ^Gx&N^Pm;nd2h|X*?Mu=RQ2+n{ diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua index a514d12..7c8f38b 100644 --- a/src/box/lua/upgrade.lua +++ b/src/box/lua/upgrade.lua @@ -479,10 +479,11 @@ local function upgrade_to_1_8_4() {name='nlt', type='string'}, {name='ndlt', type='string'}, {name='sample', type='scalar'}} + local MAP = setmap({}) log.info("create space _sql_stat1") _space:insert{box.schema.SQL_STAT1_ID, ADMIN, '_sql_stat1', 'memtx', 0, - setmap({}), stat1_ft} + MAP, stat1_ft} log.info("create index primary on _sql_stat1") _index:insert{box.schema.SQL_STAT1_ID, 0, 'primary', 'tree', @@ -490,12 +491,21 @@ local function upgrade_to_1_8_4() log.info("create space _sql_stat4") _space:insert{box.schema.SQL_STAT4_ID, ADMIN, '_sql_stat4', 'memtx', 0, - setmap({}), stat4_ft} + MAP, stat4_ft} log.info("create index primary on _sql_stat4") _index:insert{box.schema.SQL_STAT4_ID, 0, 'primary', 'tree', {unique = true}, {{0, 'string'}, {1, 'string'}, {5, 'scalar'}}} + + -- Nullability wasn't skipable. This was fixed in 1-7. + -- Now, abscent field means NULL, so we can safely set second + -- field in format, marking it nullable. + log.info("Add nullable value field to space _schema") + local format = {} + format[1] = {type='string', name='key'} + format[2] = {type='any', name='value', is_nullable=true} + box.space._schema:format(format) end -------------------------------------------------------------------------------- diff --git a/src/box/sql.c b/src/box/sql.c index a13f2f8..6d8ef9a 100644 --- a/src/box/sql.c +++ b/src/box/sql.c @@ -220,9 +220,8 @@ tarantoolSqlite3TupleColumnFast(BtCursor *pCur, u32 fieldno, u32 *field_size) assert(c != NULL); assert(c->tuple_last != NULL); struct tuple_format *format = tuple_format(c->tuple_last); - assert(format->exact_field_count == 0 - || fieldno < format->exact_field_count); - if (format->fields[fieldno].offset_slot == TUPLE_OFFSET_SLOT_NIL) + if (fieldno < format->field_count + || format->fields[fieldno].offset_slot == TUPLE_OFFSET_SLOT_NIL) return NULL; const char *field = tuple_field(c->tuple_last, fieldno); const char *end = field; diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result index f310326..e6c01fe 100644 --- a/test/box-py/bootstrap.result +++ b/test/box-py/bootstrap.result @@ -13,7 +13,8 @@ box.space._cluster:select{} ... box.space._space:select{} --- -- - [272, 1, '_schema', 'memtx', 0, {}, [{'type': 'string', 'name': 'key'}]] +- - [272, 1, '_schema', 'memtx', 0, {}, [{'type': 'string', 'name': 'key'}, {'type': 'any', + 'name': 'value', 'is_nullable': true}]] - [276, 1, '_collation', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, { 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { diff --git a/test/box/access_misc.result b/test/box/access_misc.result index 1bbc8a3..9b3c5c0 100644 --- a/test/box/access_misc.result +++ b/test/box/access_misc.result @@ -732,7 +732,8 @@ box.space._user:select() ... box.space._space:select() --- -- - [272, 1, '_schema', 'memtx', 0, {}, [{'type': 'string', 'name': 'key'}]] +- - [272, 1, '_schema', 'memtx', 0, {}, [{'type': 'string', 'name': 'key'}, {'type': 'any', + 'name': 'value', 'is_nullable': true}]] - [276, 1, '_collation', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, { 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { diff --git a/test/xlog/upgrade.result b/test/xlog/upgrade.result index 710ca40..5a6bd05 100644 --- a/test/xlog/upgrade.result +++ b/test/xlog/upgrade.result @@ -40,7 +40,8 @@ box.space._schema:select() ... box.space._space:select() --- -- - [272, 1, '_schema', 'memtx', 0, {}, [{'type': 'string', 'name': 'key'}]] +- - [272, 1, '_schema', 'memtx', 0, {}, [{'type': 'string', 'name': 'key'}, {'type': 'any', + 'name': 'value', 'is_nullable': true}]] - [276, 1, '_collation', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, { 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { -- 2.11.0
next prev parent reply other threads:[~2018-03-29 6:42 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-03-29 6:42 [tarantool-patches] [PATCH 0/3] sql: move column's default value to Tarantool's core Kirill Yukhin 2018-03-29 6:42 ` Kirill Yukhin [this message] 2018-03-29 6:42 ` [tarantool-patches] [PATCH 2/3] sql: remove dead find DB functions Kirill Yukhin 2018-03-29 6:42 ` [tarantool-patches] [PATCH 3/3] sql: move default col values to Tarantool's core Kirill Yukhin 2018-03-29 14:00 ` [tarantool-patches] " v.shpilevoy 2018-03-31 3:55 ` Kirill Yukhin 2018-03-31 4:24 ` [tarantool-patches] [PATCH] " Kirill Yukhin 2018-04-03 6:29 ` [tarantool-patches] Re: [PATCH 3/3] " Kirill Yukhin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=96cf96edda40dbc76838d742c32a97409c81bb5f.1522303843.git.kyukhin@tarantool.org \ --to=kyukhin@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [tarantool-patches] [PATCH 1/3] Add value field to _schema space' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox