[patches] [PATCH] sql: make _sql_stat[14] to be a system spaces

Kirill Yukhin kyukhin at tarantool.org
Tue Feb 6 08:48:46 MSK 2018


Hello,
My comments are inlined.

Also, I'd like see vdavydov's OK on non-SQL parts.

On 05 Feb 20:10, AKhatskevich wrote:
>   Making `stat[14]` a system spaces enables us to allow users to create
Extra space.

> spaces which starts with `_`, because it cannot affect internal state
> anymore.
>   Since now the only constraints on table names is:
>     - consists of printable symbols only
>     - length < 65k
Please, describe what this change doing.

> 
> Closes #2126
> ---
>  src/box/bootstrap.snap             | Bin 1531 -> 1661 bytes
>  src/box/lua/space.cc               |   4 +++
>  src/box/lua/upgrade.lua            |  31 +++++++++++++++++++
>  src/box/schema_def.h               |   3 ++
>  src/box/sql.c                      |  29 ++++++++++++++++--
>  src/box/sql/analyze.c              |  61 +++++++++++++------------------------
>  src/box/sql/tarantoolInt.h         |   2 ++
>  test/app-tap/tarantoolctl.test.lua |   4 +--
>  test/box-py/bootstrap.result       |  11 ++++++-
>  test/box/access_misc.result        |   6 ++++
>  test/box/access_sysview.result     |   6 ++--
>  test/box/alter.result              |   7 +++--
>  test/sql-tap/analyze1.test.lua     |  22 +------------
>  test/sql-tap/analyze9.test.lua     |  20 ++----------
>  test/wal_off/alter.result          |   2 +-
>  test/xlog/upgrade.result           |  11 ++++++-
>  16 files changed, 127 insertions(+), 92 deletions(-)
> 
> diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap
> index be43e72b620eff1937d1bdeb4e4bbc9d664ea561..64fc57b13a1f55e8190c086df6db8e09b5282165 100644
> GIT binary patch
> delta 1655
> zcmV--28j9l3;hg`8GkZ1H7#d2W;J9mH92E53Q2BrbYX5|WjY`+Wi at 6pG&yE1WH&iB
> zEi^bbIW0IgWH2o<F*7qVG&eP6GGR3eRzqxWV{1Afdoem7F*q}Q3JTS_3%bn({Q%D4
> z_<R+m0000004TLD{Qyv<F92FWNDfKR7I6XqUp&AU4^j0%8h>311ITLhXp^M^7m!O?
> z<lgopnIe%XsdAI~S!uspww%CFPj$v_Yymd_Gir()SvySyvSH>}Pt~1L3eNz=0NDUu
> zYC{9ITTK$XWW1B(OvK+PrX;NI*E%B#z78|jWev<qczpDjI~K+9^Oo2a0S`p>F05yv
> z&b#yUNm!rp^nV1YJKgmz6uZ9lagSzMY)}y{6kxm6gl+7~o20dRsDF1}6Oun~$px_8
> zY6eMy1BDBjeQ^A;E@{?>YuUD2O#lR}9y8znq7m6{HLutpFnc at LmD=rA6O=)HS31#j
> z7<D3{R2?Rz at G3=Ofu<+PeBTQ7ESd~f_IF;2AMNB=Y=5m(Sa at hwj!1BTq>9ZH0Jri4
> zEn2o)&GPhWw#LCLZ&KA at yVd;g#r(>f{PFttKUO2q|JXI&A?=kn>7lk`5Zlj76U%n1
> z+3F>Z?dPS3+R_3dpDtN1FSRfVwp-1zKPU3(lI5Xxl)#5WurY~dna|FHI(w;oIk4So
> zmLh(kXMe|_*ThmVu-$5E{NgyS#1HnZ4}WOixN~#|>+F*455Mb7Bfs;R5&dP(bMMEx
> z6wvwn;xJBoc{D2`fcM5IcI}ashFD~wU6<qMf#PQtkj|n0w8(#$<N-cVoIOs|ERGFM
> z&5el`C2S3enh`1yst_vGncl9e9nE&Dxt&A08Gn<EDP=;HP9;;R1Ooyl28J~HF!He7
> zYW9pea4;t~df{-sY-n-ZqM*Sgg9`?i3nEVRBC>FAsDeFvqSz3Hkc+hwwp+~>3H9ue
> z@?}oeWh&%<_gQ7JK|b7zh;(6|f_m0PDKD<DD3;pe87Swq>67vi+HN&B7V*c^&SyJd
> zmVb$>E;Du9xhLjuZ;9;@0sM~l>kmDinE(xOVsRjBx0+|ipDuUze(cSI?N&1k^X^{F
> z1~T~cGBl|Z3S~NxO5jXKQq6QJ(u|4*B(YSf6HDez8LZfotJz^eM~<2e$GyQ(-7wjJ
> zslm~(q8Zz*=54V-=#^phnER(oR_)pt*MG&ha^(t at 4#sw?8LH3szp^fCFK)FluDjV!
> zmK?PfTzpw1e*@XA#f#&feOX+UWNL4WE3weo1!C0N72B;QiICMIVO+F%vEuVkgU9Q@
> zWb_jGLg!zt7Zek2aT1AJ-;a>}yqtCZWr*4u<4P*FTTL4rFl2UQ=^V44moYIr<A3Uj
> zwJ~m#BEUH$fj6k(RAi76m;nGl0Z;((1xG38Y#tI|z&MKIFpOas24nyXA_GSNATWSv
> zK!d0S0GKRGLJN)n_Kll#61wuv*X11hn^V$6cYeUMT2$q1an#t3A>oFs6+-A?ptB<^
> z8ggPG2BMEj;x2ojN#G@*7?sG2+JAQmnyH}{&2g_dz6J3#r}9R~n#I(g<?C+&VpF-H
> z`SAWgZVo1TM&#E+R)$3OP7n44Ma=>Tox5#qG1^-2eK&YsGv14vn!->YsS7aNDT+I8
> z9QU}&k47u%!L8L8!h!S8Am0)DK+7w$)nOOT*t%kfF8b?pfdH-_Zjh(|6 at Qin+e<#;
> zJfuKmv;z$jc<$f<dsyWYv#X&WW@^^WFw*v%ogEfD56YPB=)Dhy1_I0lM<+Je%zyha
> zT9c~;Ic}5Knde5?-7>fXMLcg9pmtad*!D8rCa-{fUK%ALS^q!N|B#|j2<P<h#K`df
> z+#fDThU1K^a}Lbg$NQ);mVeL(Nr>iJd011umL$L@&<CywuI0Q*s<sS5YhU^{sxd^z
> z98+P>Sm2wS3x^Ob;{9RtSGRim^M#VdBXPU5DH$d6VzW7_y4*~}x7AT-z~HE&{Ai=b
> zp@&3!l4;w^i|JGoZgE#<KLBMJcA=m+csL5&FE-kLGE8g`o#h2UqHy4Yh5QUIz>YA9
> z-;=C}&KR9rCE%fHIu)*U(Q9JcW#FOl+Hhr>MKdf$Fi^xLqMz_2DxhjVB>Senb5y{X
> zW(bLYG?UZ{Xep>Se=S36G&=WgAtp10t8rfccCIrBZNsv+BiE|+q at E;&dk)nQt?kO0
> B8%zKI
> 
> delta 1524
> zcmV<Q1q=H94Eqa^8Gku5EoV76V=`khH#Q1MZgX^DZewLSATu*&WjQ!GIW1&mFk~$>
> zWMMTeI50J2Ej49gH!?IbI5lKrWeQe9Y;R+0Iv{&}3JTS_3%bn(g8<Hu{TEcF00000
> z04TLD{QywaD*(3q)Jo7)aRLBeJir$Z*$`I7Q@^-{!lFRylz)<92apq9YE6vbrpZ*E
> zltjTaNv~ZJ;x&)9h356O0QlH2Qqhw!*lV05LEH-o=4+&sQosPV0LcLO8^szK>-#m%
> zc!ICP%yoGK^N$@LJ?4%@ar`_W6(zvm`1u#sv{2{WdF{zqr|t0MpgH~ZuM at xC^>NQu
> zPpZ%kP6XguYJbKye&tQtTs_pkJHP4V&jVsjuBB!UA2Uj*_^A($U)H6q`fw=sT58$>
> zRganPhuM0rrRGo-0<)KcU$uHIHCwC>t5m903j9*0E``D-)C%Us^wOQMsio at hs}&5Z
> zWy$`|OYyVGxRXk0l9Qbpr;Hk54<#~4Of20AH)GKM*nc(Np$(Qd>7BJ(Fx$^d)XBBf
> zboCO?_Vdy^>q$Y+r^^=1tJPA1YpGfG=RKb;Ti#ho2z<B$8<S`L at yU5mXRlUS3|vdi
> zQpB)R)-mV_sVW7orKZL&j^mB^#oqPd at 9Z0Qe&%4EUqAc9?>gJa at 0`X%e~II{2UJrC
> z;CzPh7=O3HJX;+Nz<c8pzxLRwg;;EzU6<qMf#T;@kj|n0+K&G)$-P<?3AmP;B!2zy
> zPL4D&&r27VobiT8tuu}kbE`HZY(&t6m;q5^KE!xnu~;1oMpm<32imQ!rRJ6C=w47N
> zR0 at SUolYE1E+tcGLrDWE1F3W^HF-!R4ug!lz<**v#?s>A*rie-g+dCK!ZKPJO&F<I
> zD at v&{9wSvGK at _3Z(Y4e>5m6b>kuPy%UDkB|cc;;lD&)hlKmfnv{rW?X=O95khE$se
> z*HTl~@u$n(J)lbC;96>iVcy-l)ftp)saeXrTa9S|%bR2|xR#n9zL;TolR#eo-bVj{
> ztA8%_l7hMUl?hy(I at 1b+FDCHxpozumSl?2qT9#B97h|&`qsEB2Ff7drmJ3vi5({oc
> z9o3*zq0`b-J?8%DvURg{#&s%&hK7>VnQN&jqR;okvMz5auBE1lrFF)2DE5;jKkLeg
> zFN@^wpn6TbIBwdP#ha3>RXgKOC3Jp)_<yXG#I at 865w=`pjEgcgC_W7^Xgp4=ML&@>
> zI1h8dilDHIn at H^XfOPirlGgc`;aTa7JIP#2O_>=he(KoL*<}ZT9H`+`WRMb=0RR92
> zPyitYM=54D4-$aTIEte%3Sk%qWC%Ej4HyA{z#t?b0;mN5S_XDO%NKaGumfh*nSUlz
> zb5)WH9@)&*rsH%Ke>zn%VtZ78Q7$nF1>%8_2t(D6%(s;gwtV3d&Z?!1%AyeUm04=q
> zP-V8SclSgcGmINL5l<3;$U~tkjVx1G14-n?)v~@oqFDf8NjID=?nQ#jW+U!3YkQHQ
> zRw!4IdTwdtyQbjAArWW!(I<<#1Al=}G911rU=0u}*TAxPE7d?*w4Gn0E0Fc%K#w5c
> znGj--Hv}|fJYj=EN`azi0~#_A+6(NmA}m9;vKErX`-Ij5ZJO9I;B36u1?s6Ay_FE4
> zT!K0Bi<IoYR|F>9hr^7XoX+V46EoNUIsZsJ8D=oDKIg#DKYB+EIes4``F}Kr5rpL*
> zYawEMzCJi5;QBN+i7Ue(pY2N`=^8^d1!6R87rzwA!FCY$BK{|||GL#X=P$H9Fw)$m
> zO$nwlL)@Svm+P8|h at T#10}PHV${%*r55<tYxSlrP51Fn-!7dI1Vgpd3VHYR#qKEf`
> z`w>R_F=%9C=!wq(>MeM<B5fB_7C=%Mz)>V`nkJs&&{25EqfWQmt>~rybs0E|yq8~@
> zAfp-bNIWdQNOZ+KsR~!=4+)=j?T#wIuX$Z!W<C!Ux7rgG&)y<XLyd61A36yK;c6h#
> a|DkmsdDO6^>c|AX&exNqFv<bd5UuSXsMW>*
> 
> diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc
> index c38a4ea43..0e5bf1f6c 100644
> --- a/src/box/lua/space.cc
> +++ b/src/box/lua/space.cc
> @@ -426,6 +426,10 @@ box_lua_space_init(struct lua_State *L)
>  	lua_setfield(L, -2, "CLUSTER_ID");
>  	lua_pushnumber(L, BOX_TRIGGER_ID);
>  	lua_setfield(L, -2, "TRIGGER_ID");
> +	lua_pushnumber(L, BOX_SQL_STAT1_ID);
> +	lua_setfield(L, -2, "SQL_STAT1_ID");
> +	lua_pushnumber(L, BOX_SQL_STAT4_ID);
> +	lua_setfield(L, -2, "SQL_STAT4_ID");
>  	lua_pushnumber(L, BOX_TRUNCATE_ID);
>  	lua_setfield(L, -2, "TRUNCATE_ID");
>  	lua_pushnumber(L, BOX_SEQUENCE_ID);
> diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua
> index 80acfa1e6..84eec73b3 100644
> --- a/src/box/lua/upgrade.lua
> +++ b/src/box/lua/upgrade.lua
> @@ -464,6 +464,36 @@ local function upgrade_to_1_8_2()
>  end
>  
>  --------------------------------------------------------------------------------
> +-- Tarantool 1.8.4
> +--------------------------------------------------------------------------------
> +
> +local function upgrade_to_1_8_4()
> +    local _space = box.space[box.schema.SPACE_ID]
> +    local _index = box.space[box.schema.INDEX_ID]
> +    local stat1_ft = {{name='tbl', type='string'},
> +                      {name='idx', type='string'},
> +	              {name='stat', type='scalar'}}
Don't use tab here.

> +    local stat4_ft = {{name='tbl', type='string'},
> +                      {name='idx', type='string'},
> +                      {name='neq', type='string', is_nullable=true},
> +                      {name='nlt', type='string', is_nullable=true},
> +                      {name='ndlt', type='string', is_nullable=true},
> +                      {name='sample', type='scalar'}}
> +
> +    log.info("create space _sql_stat1")
> +    _space:insert{box.schema.SQL_STAT1_ID, ADMIN, '_sql_stat1', 'memtx', 0, setmap({}), stat1_ft}
more than 80 chars.

> +    log.info("create index primary on _stat1")
> +    _index:insert{box.schema.SQL_STAT1_ID, 0, 'primary', 'tree', { unique = true },
Ditto.

> +        {{0, 'string'}, {1, 'string'}}}
> +    log.info("create space _sql_stat4")
> +    _space:insert{box.schema.SQL_STAT4_ID, ADMIN, '_sql_stat4', 'memtx', 0, setmap({}), stat4_ft}
Ditto.

> +    log.info("create index primary on _stat4")
> +    _index:insert{box.schema.SQL_STAT4_ID, 0, 'primary', 'tree', { unique = true },
Ditto.

> +        {{0, 'string'}, {1, 'string'}, {5, 'scalar'}}}
> +end
> +
> +--------------------------------------------------------------------------------
> +
>  
>  local function get_version()
>      local version = box.space._schema:get{'version'}
> @@ -491,6 +521,7 @@ local function upgrade(options)
>          {version = mkversion(1, 7, 6), func = upgrade_to_1_7_6, auto = true},
>          {version = mkversion(1, 7, 7), func = upgrade_to_1_7_7, auto = true},
>          {version = mkversion(1, 8, 2), func = upgrade_to_1_8_2, auto = true},
> +        {version = mkversion(1, 8, 4), func = upgrade_to_1_8_4, auto = true},
>      }
>  
>      for _, handler in ipairs(handlers) do
> diff --git a/src/box/schema_def.h b/src/box/schema_def.h
> index 7e471b382..f5a5344f4 100644
> --- a/src/box/schema_def.h
> +++ b/src/box/schema_def.h
> @@ -102,6 +102,9 @@ enum {
>  	BOX_TRUNCATE_ID = 330,
>  	/** Space id of _space_sequence. */
>  	BOX_SPACE_SEQUENCE_ID = 340,
> +	/** Space ids for SQL statictics. */
> +	BOX_SQL_STAT1_ID = 348,
> +	BOX_SQL_STAT4_ID = 349,
>  	/** End of the reserved range of system spaces. */
>  	BOX_SYSTEM_ID_MAX = 511,
>  	BOX_ID_NIL = 2147483647
> diff --git a/src/box/sql.c b/src/box/sql.c
> index 82cdcadef..0d9282001 100644
> --- a/src/box/sql.c
> +++ b/src/box/sql.c
> @@ -660,14 +660,20 @@ int tarantoolSqlite3EphemeralClearTable(BtCursor *pCur)
>  }
>  
>  /*
> - * Removes all instances from table. If there is no active transaction,
> - * then truncate is used. Otherwise, manually deletes one-by-one all tuples.
> + * Removes all instances from table.
>   */
>  int tarantoolSqlite3ClearTable(int iTable)
>  {
>  	int space_id = SQLITE_PAGENO_TO_SPACEID(iTable);
>  
> -	if (box_txn()) {
> +	/*
> +	 *  There are two cases when we have to delete tuples one by one:
> +	 *  1. When we are inside of another transaction, we can not use
> +	 *  truncate, because it is a ddl. (prohibited in transactions)
> +	 *  2. Truncate on system spaces is disallowed. (because of triggers)
> +	 *   (main usecase is _sql_stat4 table editing)
> +	 */
> +	if (box_txn() || space_id < BOX_SYSTEM_ID_MAX) {
>  		int primary_index_id = 0;
>  		char *key;
>  		uint32_t key_size;
> @@ -1444,6 +1450,23 @@ void tarantoolSqlite3LoadSchema(InitData *init)
>  		       "CREATE TABLE \""TARANTOOL_SYS_SPACE_SEQUENCE_NAME
>  		       "\" (\"space_id\" INT PRIMARY KEY, \"sequence_id\" INT, \"flag\" INT)");
More than 80 chars.

> +	sql_schema_put(init, TARANTOOL_SYS_SQL_STAT1_NAME, BOX_SQL_STAT1_ID, 0,
> +		       "CREATE TABLE \""TARANTOOL_SYS_SQL_STAT1_NAME
> +			       "\"(\"tbl\" text,"
> +			       "\"idx\" text,"
> +			       "\"stat\" not null,"
> +			       "PRIMARY KEY(\"tbl\", \"idx\"))");
> +
> +	sql_schema_put(init, TARANTOOL_SYS_SQL_STAT4_NAME, BOX_SQL_STAT4_ID, 0,
> +		       "CREATE TABLE \""TARANTOOL_SYS_SQL_STAT4_NAME
> +			       "\"(\"tbl\" text,"
> +			       "\"idx\" text,"
> +			       "\"neq\" text,"
> +			       "\"nlt\" text,"
> +			       "\"ndlt\" text,"
> +			       "\"sample\","
> +			       "PRIMARY KEY(\"tbl\", \"idx\", \"sample\"))");
> +
>  	/* Read _space */
>  	if (space_foreach(space_foreach_put_cb, init) != 0) {
>  		init->rc = SQLITE_TARANTOOL_ERROR;
> diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c
> index 8d442c5a8..1303fcc2a 100644
> --- a/src/box/sql/analyze.c
> +++ b/src/box/sql/analyze.c
> @@ -135,15 +135,10 @@ openStatTable(Parse * pParse,	/* Parsing context */
>  	      const char *zWhereType	/* Either "tbl" or "idx" */
>      )
>  {
> -	static const struct {
> -		const char *zName;
> -		const char *zCols;
> -	} aTable[] = {
> -		{
> -		"_sql_stat1", "\"tbl\",\"idx\",\"stat\", PRIMARY KEY(\"tbl\", \"idx\")"},
> -		{
> -		"_sql_stat4", "\"tbl\",\"idx\",\"neq\",\"nlt\",\"ndlt\",\"sample\", PRIMARY KEY(\"tbl\", \"idx\", \"sample\")"}
> -	};
> +	const char *aTable[] = {
> +		"_sql_stat1",
> +		"_sql_stat4",
> +		NULL};
>  	int i;
>  	sqlite3 *db = pParse->db;
>  	Vdbe *v = sqlite3GetVdbe(pParse);
> @@ -157,42 +152,28 @@ openStatTable(Parse * pParse,	/* Parsing context */
>  	/* Create new statistic tables if they do not exist, or clear them
>  	 * if they do already exist.
>  	 */
> -	for (i = 0; i < ArraySize(aTable); i++) {
> -		const char *zTab = aTable[i].zName;
> +	for (i = 0; aTable[i]; i++) {
> +		const char *zTab = aTable[i];
>  		Table *pStat;
> -		if ((pStat = sqlite3FindTable(db, zTab)) == 0) {
> -			if (aTable[i].zCols) {
> -				/* The sql_statN table does not exist. Create it. Note that a
> -				 * side-effect of the CREATE TABLE statement is to leave the rootpage
> -				 * of the new table in register pParse->regRoot. This is important
> -				 * because the OpenWrite opcode below will be needing it.
> -				 */
> -				sqlite3NestedParse(pParse,
> -						   "CREATE TABLE \"%s\"(%s)", zTab,
> -						   aTable[i].zCols);
> -				aRoot[i] = pParse->regRoot;
> -				aCreateTbl[i] = OPFLAG_P2ISREG;
> -			}
> +		/* The table already exists, because it is a system space */
> +		pStat = sqlite3FindTable(db, zTab);
> +		aRoot[i] = pStat->tnum;
> +		aCreateTbl[i] = 0;
> +		if (zWhere) {
> +			sqlite3NestedParse(pParse,
> +					   "DELETE FROM \"%s\" WHERE \"%s\"=%Q",
> +					   zTab, zWhereType, zWhere);
>  		} else {
> -			/* The table already exists. If zWhere is not NULL, delete all entries
> -			 * associated with the table zWhere. If zWhere is NULL, delete the
> -			 * entire contents of the table.
> +			/*
> +			 * The sql_stat[134] table already exists.
What is sql_stat3? Also underscore missing.

> +			 * Delete all rows.
>  			 */
> -			aRoot[i] = pStat->tnum;
> -			aCreateTbl[i] = 0;
> -			if (zWhere) {
> -				sqlite3NestedParse(pParse,
> -						   "DELETE FROM \"%s\" WHERE \"%s\"=%Q",
> -						   zTab, zWhereType, zWhere);
> -			} else {
> -				/* The sql_stat[14] table already exists.  Delete all rows. */
> -				sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], 0);
> -			}
> +			sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], 0);
>  		}
>  	}
>  
> -	/* Open the sql_stat[14] tables for writing. */
> -	for (i = 0; i < ArraySize(aTable); i++) {
> +	/* Open the sql_stat[134] tables for writing. */
Ditto.

> +	for (i = 0; aTable[i]; i++) {
>  		int addr;
>  		addr =
>  		    sqlite3VdbeAddOp3(v, OP_OpenWrite, iStatCur + i, aRoot[i],
> @@ -200,7 +181,7 @@ openStatTable(Parse * pParse,	/* Parsing context */
>  		v->aOp[addr].p4.pKeyInfo = 0;
>  		v->aOp[addr].p4type = P4_KEYINFO;
>  		sqlite3VdbeChangeP5(v, aCreateTbl[i]);
> -		VdbeComment((v, aTable[i].zName));
> +		VdbeComment((v, aTable[i]));
>  	}
>  }
>  
> diff --git a/src/box/sql/tarantoolInt.h b/src/box/sql/tarantoolInt.h
> index 4781bf574..e8b864c1b 100644
> --- a/src/box/sql/tarantoolInt.h
> +++ b/src/box/sql/tarantoolInt.h
> @@ -18,6 +18,8 @@
>  #define TARANTOOL_SYS_INDEX_NAME   "_index"
>  #define TARANTOOL_SYS_TRIGGER_NAME "_trigger"
>  #define TARANTOOL_SYS_TRUNCATE_NAME "_truncate"
> +#define TARANTOOL_SYS_SQL_STAT1_NAME "_sql_stat1"
> +#define TARANTOOL_SYS_SQL_STAT4_NAME "_sql_stat4"
>  
>  /* Max space id seen so far. */
>  #define TARANTOOL_SYS_SCHEMA_MAXID_KEY "max_id"
> diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua
> index 2e1c97a2f..20bbe7556 100755
> --- a/test/app-tap/tarantoolctl.test.lua
> +++ b/test/app-tap/tarantoolctl.test.lua
> @@ -338,8 +338,8 @@ do
>              check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1", "\n", 3)
>              check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1 --replica 2", "\n", 3)
>              check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 2", "\n", 0)
> -            check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 18)
> -            check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 41)
> +            check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 20)
> +            check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 43)
>          end)
>      end)
>  
> diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result
> index 2625000d3..4819eea6d 100644
> --- a/test/box-py/bootstrap.result
> +++ b/test/box-py/bootstrap.result
> @@ -5,7 +5,7 @@ box.space._schema:select{}
>  ---
>  - - ['cluster', '<cluster uuid>']
>    - ['max_id', 511]
> -  - ['version', 1, 8, 2]
> +  - ['version', 1, 8, 4]
>  ...
>  box.space._cluster:select{}
>  ---
> @@ -65,6 +65,12 @@ box.space._space:select{}
>          'type': 'unsigned'}]]
>    - [340, 1, '_space_sequence', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'},
>        {'name': 'sequence_id', 'type': 'unsigned'}, {'name': 'is_generated', 'type': 'boolean'}]]
> +  - [348, 1, '_sql_stat1', 'memtx', 0, {}, [{'name': 'tbl', 'type': 'string'}, {'name': 'idx',
> +        'type': 'string'}, {'name': 'stat', 'type': 'scalar'}]]
> +  - [349, 1, '_sql_stat4', 'memtx', 0, {}, [{'name': 'tbl', 'type': 'string'}, {'name': 'idx',
> +        'type': 'string'}, {'type': 'string', 'name': 'neq', 'is_nullable': true},
> +      {'type': 'string', 'name': 'nlt', 'is_nullable': true}, {'type': 'string', 'name': 'ndlt',
> +        'is_nullable': true}, {'name': 'sample', 'type': 'scalar'}]]
>  ...
>  box.space._index:select{}
>  ---
> @@ -111,6 +117,9 @@ box.space._index:select{}
>    - [330, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
>    - [340, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
>    - [340, 1, 'sequence', 'tree', {'unique': false}, [[1, 'unsigned']]]
> +  - [348, 0, 'primary', 'tree', {'unique': true}, [[0, 'string'], [1, 'string']]]
> +  - [349, 0, 'primary', 'tree', {'unique': true}, [[0, 'string'], [1, 'string'], [
> +        5, 'scalar']]]
>  ...
>  box.space._user:select{}
>  ---
> diff --git a/test/box/access_misc.result b/test/box/access_misc.result
> index 097b7135d..824b5b51f 100644
> --- a/test/box/access_misc.result
> +++ b/test/box/access_misc.result
> @@ -785,6 +785,12 @@ box.space._space:select()
>          'type': 'unsigned'}]]
>    - [340, 1, '_space_sequence', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'},
>        {'name': 'sequence_id', 'type': 'unsigned'}, {'name': 'is_generated', 'type': 'boolean'}]]
> +  - [348, 1, '_sql_stat1', 'memtx', 0, {}, [{'name': 'tbl', 'type': 'string'}, {'name': 'idx',
> +        'type': 'string'}, {'name': 'stat', 'type': 'scalar'}]]
> +  - [349, 1, '_sql_stat4', 'memtx', 0, {}, [{'name': 'tbl', 'type': 'string'}, {'name': 'idx',
> +        'type': 'string'}, {'type': 'string', 'name': 'neq', 'is_nullable': true},
> +      {'type': 'string', 'name': 'nlt', 'is_nullable': true}, {'type': 'string', 'name': 'ndlt',
> +        'is_nullable': true}, {'name': 'sample', 'type': 'scalar'}]]
>  ...
>  box.space._func:select()
>  ---
> diff --git a/test/box/access_sysview.result b/test/box/access_sysview.result
> index 58b2681c2..4635c76d4 100644
> --- a/test/box/access_sysview.result
> +++ b/test/box/access_sysview.result
> @@ -226,11 +226,11 @@ box.session.su('guest')
>  ...
>  #box.space._vspace:select{}
>  ---
> -- 19
> +- 21
>  ...
>  #box.space._vindex:select{}
>  ---
> -- 42
> +- 44
>  ...
>  #box.space._vuser:select{}
>  ---
> @@ -258,7 +258,7 @@ box.session.su('guest')
>  ...
>  #box.space._vindex:select{}
>  ---
> -- 42
> +- 44
>  ...
>  #box.space._vuser:select{}
>  ---
> diff --git a/test/box/alter.result b/test/box/alter.result
> index 926a756e4..83b220b38 100644
> --- a/test/box/alter.result
> +++ b/test/box/alter.result
> @@ -107,7 +107,7 @@ space = box.space[t[1]]
>  ...
>  space.id
>  ---
> -- 341
> +- 350
>  ...
>  space.field_count
>  ---
> @@ -152,7 +152,7 @@ space_deleted
>  ...
>  space:replace{0}
>  ---
> -- error: Space '341' does not exist
> +- error: Space '350' does not exist
>  ...
>  _index:insert{_space.id, 0, 'primary', 'tree', {unique=true}, {{0, 'unsigned'}}}
>  ---
> @@ -224,6 +224,9 @@ _index:select{}
>    - [330, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
>    - [340, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
>    - [340, 1, 'sequence', 'tree', {'unique': false}, [[1, 'unsigned']]]
> +  - [348, 0, 'primary', 'tree', {'unique': true}, [[0, 'string'], [1, 'string']]]
> +  - [349, 0, 'primary', 'tree', {'unique': true}, [[0, 'string'], [1, 'string'], [
> +        5, 'scalar']]]
>  ...
>  -- modify indexes of a system space
>  _index:delete{_index.id, 0}
> diff --git a/test/sql-tap/analyze1.test.lua b/test/sql-tap/analyze1.test.lua
> index b11f44400..5d91d963f 100755
> --- a/test/sql-tap/analyze1.test.lua
> +++ b/test/sql-tap/analyze1.test.lua
> @@ -1,6 +1,6 @@
>  #!/usr/bin/env tarantool
>  test = require("sqltester")
> -test:plan(36)
> +test:plan(34)
>  
>  --!./tcltestrunner.lua
>  -- 2005 July 22
> @@ -30,26 +30,6 @@ test:do_catchsql_test(
>          -- </analyze-1.1>
>      })
>  
> -test:do_execsql_test(
> -    "analyze-1.2",
> -    [[
> -        SELECT count(*) FROM "_space" WHERE "name"='_sql_stat1'
> -    ]], {
> -        -- <analyze-1.2>
> -        0
> -        -- </analyze-1.2>
> -    })
> -
> -test:do_catchsql_test(
> -    "analyze-1.5.1",
> -    [[
> -        ANALYZE
> -    ]], {
> -        -- <analyze-1.5.1>
> -        0
> -        -- </analyze-1.5.1>
> -    })
> -
>  test:do_execsql_test(
>      "analyze-1.6",
>      [[
> diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
> index 30d5505b4..61cc4433a 100755
> --- a/test/sql-tap/analyze9.test.lua
> +++ b/test/sql-tap/analyze9.test.lua
> @@ -1,6 +1,6 @@
>  #!/usr/bin/env tarantool
>  test = require("sqltester")
> -test:plan(127)
> +test:plan(125)
>  
>  testprefix = "analyze9"
>  
> @@ -1036,7 +1036,7 @@ test:do_execsql_test(
>  test:do_execsql_test(
>      15.3,
>      [[
> -        INSERT INTO "_sql_stat4" VALUES(42, 42, 42, 42, 42, 42);
> +        INSERT INTO "_sql_stat4" VALUES('42', '42', '42', '42', '42', 42);
>      ]])
>  
>  test:do_execsql_test(
> @@ -1049,22 +1049,6 @@ test:do_execsql_test(
>          -- </15.4>
>      })
>  
> -test:do_execsql_test(
> -    15.5,
> -    [[
> -        UPDATE "_sql_stat1" SET "stat" = NULL;
> -    ]])
> -
> -test:do_execsql_test(
> -    15.6,
> -    [[
> -        SELECT * FROM x1;
> -    ]], {
> -        -- <15.6>
> -        1, 2, 3, 4, 5, 6
> -        -- </15.6>
> -    })
> -
>  test:do_execsql_test(
>      15.7,
>      [[
> diff --git a/test/wal_off/alter.result b/test/wal_off/alter.result
> index 3f15874be..4ae6c05a3 100644
> --- a/test/wal_off/alter.result
> +++ b/test/wal_off/alter.result
> @@ -28,7 +28,7 @@ end;
>  ...
>  #spaces;
>  ---
> -- 65514
> +- 65512
>  ...
>  -- cleanup
>  for k, v in pairs(spaces) do
> diff --git a/test/xlog/upgrade.result b/test/xlog/upgrade.result
> index bb5fba93c..408c142e7 100644
> --- a/test/xlog/upgrade.result
> +++ b/test/xlog/upgrade.result
> @@ -36,7 +36,7 @@ box.space._schema:select()
>  ---
>  - - ['cluster', '<server_uuid>']
>    - ['max_id', 513]
> -  - ['version', 1, 8, 2]
> +  - ['version', 1, 8, 4]
>  ...
>  box.space._space:select()
>  ---
> @@ -92,6 +92,12 @@ box.space._space:select()
>          'type': 'unsigned'}]]
>    - [340, 1, '_space_sequence', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'},
>        {'name': 'sequence_id', 'type': 'unsigned'}, {'name': 'is_generated', 'type': 'boolean'}]]
> +  - [348, 1, '_sql_stat1', 'memtx', 0, {}, [{'name': 'tbl', 'type': 'string'}, {'name': 'idx',
> +        'type': 'string'}, {'name': 'stat', 'type': 'scalar'}]]
> +  - [349, 1, '_sql_stat4', 'memtx', 0, {}, [{'name': 'tbl', 'type': 'string'}, {'name': 'idx',
> +        'type': 'string'}, {'type': 'string', 'name': 'neq', 'is_nullable': true},
> +      {'type': 'string', 'name': 'nlt', 'is_nullable': true}, {'type': 'string', 'name': 'ndlt',
> +        'is_nullable': true}, {'name': 'sample', 'type': 'scalar'}]]
>    - [512, 1, 'distro', 'memtx', 0, {}, [{'name': 'os', 'type': 'str'}, {'name': 'dist',
>          'type': 'str'}, {'name': 'version', 'type': 'num'}, {'name': 'time', 'type': 'num'}]]
>    - [513, 1, 'temporary', 'memtx', 0, {'temporary': true}, []]
> @@ -141,6 +147,9 @@ box.space._index:select()
>    - [330, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
>    - [340, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
>    - [340, 1, 'sequence', 'tree', {'unique': false}, [[1, 'unsigned']]]
> +  - [348, 0, 'primary', 'tree', {'unique': true}, [[0, 'string'], [1, 'string']]]
> +  - [349, 0, 'primary', 'tree', {'unique': true}, [[0, 'string'], [1, 'string'], [
> +        5, 'scalar']]]
>    - [512, 0, 'primary', 'hash', {'unique': true}, [[0, 'string'], [1, 'string'], [
>          2, 'unsigned']]]
>    - [512, 1, 'codename', 'hash', {'unique': true}, [[1, 'string']]]
> -- 
> 2.14.1
> 



More information about the Tarantool-patches mailing list