1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Recognize certain standard datatypes ("INT", "INTEGER", "REAL", "TEXT", and

"BLOB") and if a column has one of those datatypes, store the type part of
the bit-field information in the Column structure to save space.

FossilOrigin-Name: d2da62a9df63036b02dadca3798de9e623c2680b3ef0c37d2b18bb88693afd7f
This commit is contained in:
drh
2021-07-30 23:30:30 +00:00
parent e48f261ebf
commit c2df4d6adb
11 changed files with 97 additions and 31 deletions

View File

@ -1,5 +1,5 @@
C If\sa\sgenerated\scolumn\suses\sthe\soptional\skeywords\sGENERATE\sALWAYS,\stry\sto\savoid\nputting\sthose\skeywords\sin\sthe\stypename\sof\sthe\scolumn.\n[forum:/forumpost/ff3ffe09251c105b|Forum\spost\sff3ffe09251c105b] C Recognize\scertain\sstandard\sdatatypes\s("INT",\s"INTEGER",\s"REAL",\s"TEXT",\sand\n"BLOB")\sand\sif\sa\scolumn\shas\sone\sof\sthose\sdatatypes,\sstore\sthe\stype\spart\sof\nthe\sbit-field\sinformation\sin\sthe\sColumn\sstructure\sto\ssave\sspace.
D 2021-07-30T20:09:08.819 D 2021-07-30T23:30:30.921
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -488,7 +488,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
F src/btree.c e204a9c8fb4fe5dbb910a863ba487f4af9b5c501254ec4ccbfcdd6b1f65b7fb4 F src/btree.c e204a9c8fb4fe5dbb910a863ba487f4af9b5c501254ec4ccbfcdd6b1f65b7fb4
F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22 F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22
F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0 F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0
F src/build.c fedaf923ea61eed3496f5ef6fca6e3162344faf109e8d0228f61c7a24b92fe6a F src/build.c e9ff9104d6d64dd2a000ca9cc7d25c80a5b1a3fd2422b4e0d84afee8c8bef78b
F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/ctime.c 8159d5f706551861c18ec6c8f6bdf105e15ea00367f05d9ab65d31a1077facc1 F src/ctime.c 8159d5f706551861c18ec6c8f6bdf105e15ea00367f05d9ab65d31a1077facc1
@ -500,7 +500,7 @@ F src/expr.c b1bcf90afb7dcc0fae4d81116177e3d02e0803f81fd543c10fcd0691390b6adf
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
F src/fkey.c e9063648396c58778f77583a678342fe4a9bc82436bf23c5f9f444f2df0fdaa4 F src/fkey.c e9063648396c58778f77583a678342fe4a9bc82436bf23c5f9f444f2df0fdaa4
F src/func.c c224240cbc97fa5e9c4fe9acb128716cb835ca045532bca6951b7c45b020c56c F src/func.c c224240cbc97fa5e9c4fe9acb128716cb835ca045532bca6951b7c45b020c56c
F src/global.c 25ba4d58476f6be29bba9d9d14f7f146b78476d3a4d75ebb8c3b736328afe0f9 F src/global.c 5eba017ebbd887e2365e6e6e815e1619e41406b8946d17594e94116174787df5
F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38
F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144 F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144
@ -549,7 +549,7 @@ F src/shell.c.in 24b99dae8818d1a234732d73f4d5b49f12b510bc62735a41c04e314fafae09e
F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510
F src/sqliteInt.h 1041c70f63687392665dde29f87f8af27d27bc1e18d29c8b804360fc915c2fde F src/sqliteInt.h e2fbf849a7e0ee1842a4775952a61c966f9eb25075297dd2f3aff5b5e4418415
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@ -614,7 +614,7 @@ F src/trigger.c 7d16aa09e63226b6d8b3f0fc60b21cbfa596fc406288b2ebcf4266633d1ba222
F src/update.c 30465f9accc854e8a7932b413578027fbb68186132abbb36e01d2022473fc83d F src/update.c 30465f9accc854e8a7932b413578027fbb68186132abbb36e01d2022473fc83d
F src/upsert.c df8f1727d62b5987c4fd302cd4d7c0c84ae57cd65683c5a34a740dfe24039235 F src/upsert.c df8f1727d62b5987c4fd302cd4d7c0c84ae57cd65683c5a34a740dfe24039235
F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
F src/util.c b2cb568393144b05df06871b2c61b0f0240f1835aee2843c736391507fac2780 F src/util.c 6ca9cf268dfaf2393866990788c0797240e20e7ba7e3a22cd076e6a3c7b1a132
F src/vacuum.c 454973a59fb20bb982efc2df568a098616db6328a0491b6e84e2e07f7333db45 F src/vacuum.c 454973a59fb20bb982efc2df568a098616db6328a0491b6e84e2e07f7333db45
F src/vdbe.c b73a5ec9940185eb001ff8cff2cfd429bb438c7e89f2885e0bfdb56c3ff13386 F src/vdbe.c b73a5ec9940185eb001ff8cff2cfd429bb438c7e89f2885e0bfdb56c3ff13386
F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe
@ -747,7 +747,7 @@ F test/busy2.test dbfb61b3265e7a962d3bcd32cd542bbe3d7801edbda6438d35af5aa707cae9
F test/cache.test 13bc046b26210471ca6f2889aceb1ea52dc717de F test/cache.test 13bc046b26210471ca6f2889aceb1ea52dc717de
F test/cacheflush.test af25bb1509df04c1da10e38d8f322d66eceedf61 F test/cacheflush.test af25bb1509df04c1da10e38d8f322d66eceedf61
F test/cachespill.test 895997f84a25b323b166aecb69baab2d6380ea98f9e0bcc688c4493c535cfab9 F test/cachespill.test 895997f84a25b323b166aecb69baab2d6380ea98f9e0bcc688c4493c535cfab9
F test/capi2.test 34a1a9a96d543a2ec2c209696b11b164444f57253b1f2cba1c2e53fadede6c7b F test/capi2.test 4ee545824adc3eb33bf57ef89f77440b28188ec3da72e5425ff0fcdba32e8d5a
F test/capi3.test 3910a73c38ac76d69778dd9eb481ab7cd6ed59117fc047b4f6056a5c72529de1 F test/capi3.test 3910a73c38ac76d69778dd9eb481ab7cd6ed59117fc047b4f6056a5c72529de1
F test/capi3b.test efb2b9cfd127efa84433cd7a2d72ce0454ae0dc4 F test/capi3b.test efb2b9cfd127efa84433cd7a2d72ce0454ae0dc4
F test/capi3c.test 54e2dc0c8fd7c34ad1590d1be6864397da2438c95a9f5aee2f8fbc60c112e44b F test/capi3c.test 54e2dc0c8fd7c34ad1590d1be6864397da2438c95a9f5aee2f8fbc60c112e44b
@ -1062,7 +1062,7 @@ F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc
F test/gcfault.test dd28c228a38976d6336a3fc42d7e5f1ad060cb8c F test/gcfault.test dd28c228a38976d6336a3fc42d7e5f1ad060cb8c
F test/gencol1.test 26c55577b15f78069bacf8afee994b74b9d69aa690577db9cff926b10e4e6be2 F test/gencol1.test 6912c4280d0ad26d6e3d133a93c5abd6db0e00bc5c95d6159131a62ab4e6f586
F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98 F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98
F test/having.test a89236dd8d55aa50c4805f82ac9daf64d477a44d712d8209c118978d0ca21ec9 F test/having.test a89236dd8d55aa50c4805f82ac9daf64d477a44d712d8209c118978d0ca21ec9
F test/hexlit.test 4a6a5f46e3c65c4bf1fa06f5dd5a9507a5627751 F test/hexlit.test 4a6a5f46e3c65c4bf1fa06f5dd5a9507a5627751
@ -1270,7 +1270,7 @@ F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442
F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
F test/permutations.test 63da39a4234eed2ccd10bf7872de58e24d53a50d11014dc8a8ab9f252368e880 F test/permutations.test 63da39a4234eed2ccd10bf7872de58e24d53a50d11014dc8a8ab9f252368e880
F test/pg_common.tcl 3b27542224db1e713ae387459b5d117c836a5f6e328846922993b6d2b7640d9f F test/pg_common.tcl 3b27542224db1e713ae387459b5d117c836a5f6e328846922993b6d2b7640d9f
F test/pragma.test 50b91bedea9324d3ab48e793f908ee7d2c7dcf84bfa2281e792838be59641ec8 F test/pragma.test 30d5bbebd5e9cb5383155cf3f3c81297b98f6642d152e9d4100cf6888630da2c
F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f
F test/pragma3.test 92a46bbea12322dd94a404f49edcfbfc913a2c98115f0d030a7459bb4712ef31 F test/pragma3.test 92a46bbea12322dd94a404f49edcfbfc913a2c98115f0d030a7459bb4712ef31
F test/pragma4.test ca5e4dfc46adfe490f75d73734f70349d95a199e6510973899e502eef2c8b1f8 F test/pragma4.test ca5e4dfc46adfe490f75d73734f70349d95a199e6510973899e502eef2c8b1f8
@ -1446,7 +1446,7 @@ F test/tabfunc01.test d6821e7042e5653104dac0c63d75eff24a2415ab1889fc68b5db7fde59
F test/table.test eb3463b7add9f16a5bb836badf118cf391b809d09fdccd1f79684600d07ec132 F test/table.test eb3463b7add9f16a5bb836badf118cf391b809d09fdccd1f79684600d07ec132
F test/tableapi.test ecbcc29c4ab62c1912c3717c48ea5c5e59f7d64e4a91034e6148bd2b82f177f4 F test/tableapi.test ecbcc29c4ab62c1912c3717c48ea5c5e59f7d64e4a91034e6148bd2b82f177f4
F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930 F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930
F test/tclsqlite.test 79a473f5797e317c08f2c4f8192edb3eea6a67329b1087453328b66a7cb31070 F test/tclsqlite.test 316c96f974f0e6d7480186e3f5bb53413e5ee5480596544a97484888912a365c
F test/tempdb.test 4cdaa23ddd8acb4d79cbb1b68ccdfd09b0537aaba909ca69a876157c2a2cbd08 F test/tempdb.test 4cdaa23ddd8acb4d79cbb1b68ccdfd09b0537aaba909ca69a876157c2a2cbd08
F test/tempdb2.test 353864e96fd3ae2f70773d0ffbf8b1fe48589b02c2ec05013b540879410c3440 F test/tempdb2.test 353864e96fd3ae2f70773d0ffbf8b1fe48589b02c2ec05013b540879410c3440
F test/tempfault.test 0c0d349c9a99bf5f374655742577f8712c647900 F test/tempfault.test 0c0d349c9a99bf5f374655742577f8712c647900
@ -1695,7 +1695,7 @@ F test/vtab6.test 8e789f526e6594cf7ae933d1adee0caa87dc9f78
F test/vtab7.test 70c6f4a1d6177144a8236e4172d5fba92e683440374664ad1f04851fbb335d3c F test/vtab7.test 70c6f4a1d6177144a8236e4172d5fba92e683440374664ad1f04851fbb335d3c
F test/vtab8.test e19fa4a538fcd1bb66c22825fa8f71618fb13583 F test/vtab8.test e19fa4a538fcd1bb66c22825fa8f71618fb13583
F test/vtab9.test ea58d2b95d61955f87226381716b2d0b1d4e4f9b F test/vtab9.test ea58d2b95d61955f87226381716b2d0b1d4e4f9b
F test/vtabA.test 1317f06a03597eee29f40a49b6c21e1aaba4285f F test/vtabA.test 325a77e7f0f80aa78ab388875c0ad6fb853acc6ac54d85514650b0ae15da24ff
F test/vtabB.test 04df5dc531b9f44d9ca65b9c1b79f12b5922a796 F test/vtabB.test 04df5dc531b9f44d9ca65b9c1b79f12b5922a796
F test/vtabC.test 4528f459a13136f982e75614d120aef165f17292 F test/vtabC.test 4528f459a13136f982e75614d120aef165f17292
F test/vtabD.test 05b3f1d77117271671089e48719524b676842e96 F test/vtabD.test 05b3f1d77117271671089e48719524b676842e96
@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 980f7292afd45a8e73272e2139b55b99ab86167febec9fd0bf0356e8167b2ee9 P 3c954863f45271a3518acf51fd685a641878811fb5cfcbdbad85154aeccdc902
R 5e0d17f3eda249159c66a4dab795bade R 6b5f2c664834813a7df89f39b77ebda9
U drh U drh
Z b92983df8210770e5aba5b5d6965da26 Z 12d963d3ccf8007e48d95666e4982a9e

View File

@ -1 +1 @@
3c954863f45271a3518acf51fd685a641878811fb5cfcbdbad85154aeccdc902 d2da62a9df63036b02dadca3798de9e623c2680b3ef0c37d2b18bb88693afd7f

View File

@ -1382,6 +1382,9 @@ void sqlite3AddColumn(Parse *pParse, Token sName, Token sType){
sqlite3 *db = pParse->db; sqlite3 *db = pParse->db;
u8 hName; u8 hName;
Column *aNew; Column *aNew;
u8 eType = COLTYPE_CUSTOM;
u8 szEst = 1;
char affinity = SQLITE_AFF_BLOB;
if( (p = pParse->pNewTable)==0 ) return; if( (p = pParse->pNewTable)==0 ) return;
if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){ if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
@ -1407,7 +1410,25 @@ void sqlite3AddColumn(Parse *pParse, Token sName, Token sType){
} }
} }
z = sqlite3DbMallocRaw(db, sName.n + sType.n + 2); /* Check for standard typenames. For standard typenames we will
** set the Column.eType field rather than storing the typename after
** the column name, in order to save space. */
if( sType.n>=3 ){
sqlite3DequoteToken(&sType);
for(i=0; i<SQLITE_N_STDTYPE; i++){
if( sType.n==sqlite3StdTypeLen[i]
&& sqlite3_strnicmp(sType.z, sqlite3StdType[i], sType.n)==0
){
sType.n = 0;
eType = i+1;
affinity = sqlite3StdTypeAffinity[i];
if( affinity<=SQLITE_AFF_TEXT ) szEst = 5;
break;
}
}
}
z = sqlite3DbMallocRaw(db, sName.n + 1 + sType.n + (sType.n>0) );
if( z==0 ) return; if( z==0 ) return;
if( IN_RENAME_OBJECT ) sqlite3RenameTokenMap(pParse, (void*)z, &sName); if( IN_RENAME_OBJECT ) sqlite3RenameTokenMap(pParse, (void*)z, &sName);
memcpy(z, sName.z, sName.n); memcpy(z, sName.z, sName.n);
@ -1436,11 +1457,14 @@ void sqlite3AddColumn(Parse *pParse, Token sName, Token sType){
if( sType.n==0 ){ if( sType.n==0 ){
/* If there is no type specified, columns have the default affinity /* If there is no type specified, columns have the default affinity
** 'BLOB' with a default size of 4 bytes. */ ** 'BLOB' with a default size of 4 bytes. */
pCol->affinity = SQLITE_AFF_BLOB; pCol->affinity = affinity;
pCol->szEst = 1; pCol->eType = eType;
pCol->szEst = szEst;
#ifdef SQLITE_ENABLE_SORTER_REFERENCES #ifdef SQLITE_ENABLE_SORTER_REFERENCES
if( 4>=sqlite3GlobalConfig.szSorterRef ){ if( affinity==SQLITE_AFF_BLOB ){
pCol->colFlags |= COLFLAG_SORTERREF; if( 4>=sqlite3GlobalConfig.szSorterRef ){
pCol->colFlags |= COLFLAG_SORTERREF;
}
} }
#endif #endif
}else{ }else{
@ -1729,7 +1753,7 @@ void sqlite3AddPrimaryKey(
} }
if( nTerm==1 if( nTerm==1
&& pCol && pCol
&& sqlite3StrICmp(sqlite3ColumnType(pCol,""), "INTEGER")==0 && pCol->eType==COLTYPE_INTEGER
&& sortOrder!=SQLITE_SO_DESC && sortOrder!=SQLITE_SO_DESC
){ ){
if( IN_RENAME_OBJECT && pList ){ if( IN_RENAME_OBJECT && pList ){

View File

@ -347,3 +347,23 @@ const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER;
** Name of the default collating sequence ** Name of the default collating sequence
*/ */
const char sqlite3StrBINARY[] = "BINARY"; const char sqlite3StrBINARY[] = "BINARY";
/*
** Standard typenames. These names must match the COLTYPE_* definitions.
** Adjust the SQLITE_N_STDTYPE value if adding or removing entries.
*/
const unsigned char sqlite3StdTypeLen[] = { 4, 3, 7, 4, 4 };
const char sqlite3StdTypeAffinity[] = {
SQLITE_AFF_BLOB,
SQLITE_AFF_INTEGER,
SQLITE_AFF_INTEGER,
SQLITE_AFF_REAL,
SQLITE_AFF_TEXT
};
const char *sqlite3StdType[] = {
"BLOB",
"INT",
"INTEGER",
"REAL",
"TEXT"
};

View File

@ -2037,9 +2037,25 @@ struct Column {
char affinity; /* One of the SQLITE_AFF_... values */ char affinity; /* One of the SQLITE_AFF_... values */
u8 szEst; /* Estimated size of value in this column. sizeof(INT)==1 */ u8 szEst; /* Estimated size of value in this column. sizeof(INT)==1 */
u8 hName; /* Column name hash for faster lookup */ u8 hName; /* Column name hash for faster lookup */
u8 eType; /* One of the standard types */
u16 colFlags; /* Boolean properties. See COLFLAG_ defines below */ u16 colFlags; /* Boolean properties. See COLFLAG_ defines below */
}; };
/* Allowed values for Column.eType.
**
** Values must match entries in the global constant arrays
** sqlite3StdTypeLen[] and sqlite3StdType[]. Each value is one more
** than the offset into these arrays for the corresponding name.
** Adjust the SQLITE_N_STDTYPE value if adding or removing entries.
*/
#define COLTYPE_CUSTOM 0 /* Type appended to zName */
#define COLTYPE_BLOB 1
#define COLTYPE_INT 2
#define COLTYPE_INTEGER 3
#define COLTYPE_REAL 4
#define COLTYPE_TEXT 5
#define SQLITE_N_STDTYPE 5 /* Number of standard types */
/* Allowed values for Column.colFlags. /* Allowed values for Column.colFlags.
** **
** Constraints: ** Constraints:
@ -4794,6 +4810,9 @@ void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
#ifndef SQLITE_AMALGAMATION #ifndef SQLITE_AMALGAMATION
extern const unsigned char sqlite3OpcodeProperty[]; extern const unsigned char sqlite3OpcodeProperty[];
extern const char sqlite3StrBINARY[]; extern const char sqlite3StrBINARY[];
extern const unsigned char sqlite3StdTypeLen[];
extern const char sqlite3StdTypeAffinity[];
extern const char *sqlite3StdType[];
extern const unsigned char sqlite3UpperToLower[]; extern const unsigned char sqlite3UpperToLower[];
extern const unsigned char *sqlite3aLTb; extern const unsigned char *sqlite3aLTb;
extern const unsigned char *sqlite3aEQb; extern const unsigned char *sqlite3aEQb;

View File

@ -91,6 +91,9 @@ int sqlite3Strlen30(const char *z){
char *sqlite3ColumnType(Column *pCol, char *zDflt){ char *sqlite3ColumnType(Column *pCol, char *zDflt){
if( pCol->colFlags & COLFLAG_HASTYPE ){ if( pCol->colFlags & COLFLAG_HASTYPE ){
return pCol->zName + strlen(pCol->zName) + 1; return pCol->zName + strlen(pCol->zName) + 1;
}else if( pCol->eType ){
assert( pCol->eType<=SQLITE_N_STDTYPE );
return (char*)sqlite3StdType[pCol->eType-1];
}else{ }else{
return zDflt; return zDflt;
} }

View File

@ -64,13 +64,13 @@ do_test capi2-1.4 {
} {t1 1} } {t1 1}
do_test capi2-1.5 { do_test capi2-1.5 {
get_column_names $VM get_column_names $VM
} {name rowid text INTEGER} } {name rowid TEXT INTEGER}
do_test capi2-1.6 { do_test capi2-1.6 {
sqlite3_step $VM sqlite3_step $VM
} {SQLITE_DONE} } {SQLITE_DONE}
do_test capi2-1.7 { do_test capi2-1.7 {
list [sqlite3_column_count $VM] [get_row_values $VM] [get_column_names $VM] list [sqlite3_column_count $VM] [get_row_values $VM] [get_column_names $VM]
} {2 {} {name rowid text INTEGER}} } {2 {} {name rowid TEXT INTEGER}}
# This used to be SQLITE_MISUSE. But now we automatically reset prepared # This used to be SQLITE_MISUSE. But now we automatically reset prepared
# statements. # statements.
@ -91,7 +91,7 @@ ifcapable autoreset {
do_test capi2-1.9 { do_test capi2-1.9 {
sqlite3_reset $VM sqlite3_reset $VM
list [sqlite3_column_count $VM] [get_row_values $VM] [get_column_names $VM] list [sqlite3_column_count $VM] [get_row_values $VM] [get_column_names $VM]
} {2 {} {name rowid text INTEGER}} } {2 {} {name rowid TEXT INTEGER}}
do_test capi2-1.10 { do_test capi2-1.10 {
sqlite3_data_count $VM sqlite3_data_count $VM
} {0} } {0}
@ -120,13 +120,13 @@ do_test capi2-2.2 {
lappend r [sqlite3_column_count $VM] \ lappend r [sqlite3_column_count $VM] \
[get_row_values $VM] \ [get_row_values $VM] \
[get_column_names $VM] [get_column_names $VM]
} {SQLITE_ROW 2 {t1 1} {name rowid text INTEGER}} } {SQLITE_ROW 2 {t1 1} {name rowid TEXT INTEGER}}
do_test capi2-2.3 { do_test capi2-2.3 {
set r [sqlite3_step $VM] set r [sqlite3_step $VM]
lappend r [sqlite3_column_count $VM] \ lappend r [sqlite3_column_count $VM] \
[get_row_values $VM] \ [get_row_values $VM] \
[get_column_names $VM] [get_column_names $VM]
} {SQLITE_DONE 2 {} {name rowid text INTEGER}} } {SQLITE_DONE 2 {} {name rowid TEXT INTEGER}}
do_test capi2-2.4 { do_test capi2-2.4 {
sqlite3_finalize $VM sqlite3_finalize $VM
} {SQLITE_OK} } {SQLITE_OK}
@ -141,7 +141,7 @@ do_test capi2-2.6 {
lappend r [sqlite3_column_count $VM] \ lappend r [sqlite3_column_count $VM] \
[get_row_values $VM] \ [get_row_values $VM] \
[get_column_names $VM] [get_column_names $VM]
} {SQLITE_DONE 2 {} {name rowid text INTEGER}} } {SQLITE_DONE 2 {} {name rowid TEXT INTEGER}}
do_test capi2-2.7 { do_test capi2-2.7 {
sqlite3_finalize $VM sqlite3_finalize $VM
} {SQLITE_OK} } {SQLITE_OK}

View File

@ -600,6 +600,6 @@ do_execsql_test gencol1-21.1 {
); );
INSERT INTO t1(a) VALUES(5); INSERT INTO t1(a) VALUES(5);
SELECT name, type FROM pragma_table_xinfo('t1'); SELECT name, type FROM pragma_table_xinfo('t1');
} {a integer b int c text d {} e {int}} } {a INTEGER b INT c TEXT d {} e INT}
finish_test finish_test

View File

@ -815,7 +815,7 @@ do_test pragma-6.7 {
ORDER BY cid} ORDER BY cid}
} [concat \ } [concat \
{0 one INT 1 -1 0} \ {0 one INT 1 -1 0} \
{1 two text 0 {} 0} \ {1 two TEXT 0 {} 0} \
{2 three {VARCHAR(45, 65)} 0 'abcde' 0} \ {2 three {VARCHAR(45, 65)} 0 'abcde' 0} \
{3 four REAL 0 X'abcdef' 0} \ {3 four REAL 0 X'abcdef' 0} \
{4 five {} 0 CURRENT_TIME 0} \ {4 five {} 0 CURRENT_TIME 0} \

View File

@ -166,7 +166,7 @@ do_test tcl-2.1 {
ifcapable schema_pragmas { ifcapable schema_pragmas {
do_test tcl-2.2 { do_test tcl-2.2 {
execsql "PRAGMA table_info(t\u0123x)" execsql "PRAGMA table_info(t\u0123x)"
} "0 a int 0 {} 0 1 b\u1235 float 0 {} 0" } "0 a INT 0 {} 0 1 b\u1235 float 0 {} 0"
} }
do_test tcl-2.3 { do_test tcl-2.3 {
execsql "INSERT INTO t\u0123x VALUES(1,2.3)" execsql "INSERT INTO t\u0123x VALUES(1,2.3)"

View File

@ -128,7 +128,7 @@ proc analyse_parse {columns decltype_list} {
do_test vtabA-2.1 { do_test vtabA-2.1 {
analyse_parse {(a text, b integer hidden, c hidden)} {a b c} analyse_parse {(a text, b integer hidden, c hidden)} {a b c}
} {a text integer {}} } {a TEXT integer {}}
do_test vtabA-2.2 { do_test vtabA-2.2 {
analyse_parse {(a hidden , b integerhidden, c hidden1)} {a b c} analyse_parse {(a hidden , b integerhidden, c hidden1)} {a b c}