mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Reduce the amount of heap required to store many schemas by storing each
column datatype appended to the column name, rather than as a separate allocation. FossilOrigin-Name: 842b21162713bb141b845b01c136457a31af4ab0
This commit is contained in:
30
manifest
30
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Very\sminor\simprovement\sto\sthe\sperformance\sand\sreduction\sin\ssize\sto\sthe\nparser\sby\scapturing\sthe\sname\sand\sdatatype\sof\stable\scolumns\sin\sa\ssingle\ngrammar\srule\sreduction.
|
C Reduce\sthe\samount\sof\sheap\srequired\sto\sstore\smany\sschemas\sby\sstoring\seach\ncolumn\sdatatype\sappended\sto\sthe\scolumn\sname,\srather\sthan\sas\sa\sseparate\nallocation.
|
||||||
D 2016-02-29T13:44:38.497
|
D 2016-02-29T15:53:11.458
|
||||||
F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
|
F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc 4f319afb7c049d40aff7af6e8c4e7cc2ba18e079
|
F Makefile.msc 4f319afb7c049d40aff7af6e8c4e7cc2ba18e079
|
||||||
@@ -285,7 +285,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca
|
|||||||
F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
|
F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
|
||||||
F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
|
F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
|
||||||
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
|
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
|
||||||
F src/alter.c 44e18dfd78e8942d65d3cdaec4de972b5cd9f1f2
|
F src/alter.c 1bb0709b3048e24217b80ec6bd78a3e99a47c01b
|
||||||
F src/analyze.c ab57b6763dd4c6170a20673d14882c033affd188
|
F src/analyze.c ab57b6763dd4c6170a20673d14882c033affd188
|
||||||
F src/attach.c a3724c64de1099d85e30751213d285752aed9505
|
F src/attach.c a3724c64de1099d85e30751213d285752aed9505
|
||||||
F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240
|
F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240
|
||||||
@@ -295,7 +295,7 @@ F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73
|
|||||||
F src/btree.c 7bb920c473c277380fcb3e8a8ee28ce1a48e0abc
|
F src/btree.c 7bb920c473c277380fcb3e8a8ee28ce1a48e0abc
|
||||||
F src/btree.h a5008b9afe56e8e54ade6c436a910f112defcca9
|
F src/btree.h a5008b9afe56e8e54ade6c436a910f112defcca9
|
||||||
F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
|
F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
|
||||||
F src/build.c 5a3e2c884c7fd30f1cc46424fc1f816cc1218f5d
|
F src/build.c 43b93fe757bfffe00f97462596418b052eefdccd
|
||||||
F src/callback.c 2e76147783386374bf01b227f752c81ec872d730
|
F src/callback.c 2e76147783386374bf01b227f752c81ec872d730
|
||||||
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
|
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
|
||||||
F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
|
F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
|
||||||
@@ -314,7 +314,7 @@ F src/insert.c 723d5d708cdb61bdd47c00b9f07c75be45aefc09
|
|||||||
F src/journal.c fe3a3e2559ce3ce9d371afd30fbabbc074174575
|
F src/journal.c fe3a3e2559ce3ce9d371afd30fbabbc074174575
|
||||||
F src/legacy.c 75d3023be8f0d2b99d60f905090341a03358c58e
|
F src/legacy.c 75d3023be8f0d2b99d60f905090341a03358c58e
|
||||||
F src/loadext.c 9e2a41adcaff16ebc1ebff1f336cbf33de55396f
|
F src/loadext.c 9e2a41adcaff16ebc1ebff1f336cbf33de55396f
|
||||||
F src/main.c be9309f442ec291177642d2e48e82290e0951f4b
|
F src/main.c 32c45647866429f34d7a13a717172a8e7d0a1056
|
||||||
F src/malloc.c 1443d1ad95d67c21d77af7ae3f44678252f0efec
|
F src/malloc.c 1443d1ad95d67c21d77af7ae3f44678252f0efec
|
||||||
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
||||||
F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
|
F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
|
||||||
@@ -342,19 +342,19 @@ F src/parse.y 5ea8c81c5c41b27887f41b4a7e1c58470d7d3821
|
|||||||
F src/pcache.c 647bb53a86b7bbcf55ad88089b3ea5a9170b90df
|
F src/pcache.c 647bb53a86b7bbcf55ad88089b3ea5a9170b90df
|
||||||
F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545
|
F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545
|
||||||
F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051
|
F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051
|
||||||
F src/pragma.c 35619c4e9f79049cce964ef8ed9710ae3e5b9ca1
|
F src/pragma.c 42b3f1475b483710ba1dd1cc1ecc0c0f8db59a2e
|
||||||
F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c
|
F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c
|
||||||
F src/prepare.c 22df6171aec1d86904ed2ad30c2348a5748aa04e
|
F src/prepare.c 22df6171aec1d86904ed2ad30c2348a5748aa04e
|
||||||
F src/printf.c 63e6fb12bbe702dd664dc3703776c090383a5a26
|
F src/printf.c 63e6fb12bbe702dd664dc3703776c090383a5a26
|
||||||
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
||||||
F src/resolve.c b8f7174e5f8c33c44ded3a25a973d0bb89228c20
|
F src/resolve.c b8f7174e5f8c33c44ded3a25a973d0bb89228c20
|
||||||
F src/rowset.c 9fe4b3ad7cc00944386bb600233d8f523de07a6e
|
F src/rowset.c 9fe4b3ad7cc00944386bb600233d8f523de07a6e
|
||||||
F src/select.c 1bacfde7b7cec134d2b354cbcf67bafc67078431
|
F src/select.c 137b31daa84d57d67847bf621bb54f3353e2077b
|
||||||
F src/shell.c 5e0ab1e708dc294330ccd8230536e1801f60822e
|
F src/shell.c 5e0ab1e708dc294330ccd8230536e1801f60822e
|
||||||
F src/sqlite.h.in 57d2a02b14c9ec4f7cb294153eaf62294dc5aa68
|
F src/sqlite.h.in 57d2a02b14c9ec4f7cb294153eaf62294dc5aa68
|
||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||||
F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
|
F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
|
||||||
F src/sqliteInt.h 01b43972162c2b5ed864060a23502af3abe0e4f4
|
F src/sqliteInt.h 8aa9992cb35289ede0946f7ba8e993070e040fc4
|
||||||
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
|
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
|
||||||
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
|
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
|
||||||
F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
|
F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
|
||||||
@@ -412,7 +412,7 @@ F src/treeview.c e4b41a37530a191579d3c53142cc44ee2eb99373
|
|||||||
F src/trigger.c e14840ee0c3e549e758ec9bf3e4146e166002280
|
F src/trigger.c e14840ee0c3e549e758ec9bf3e4146e166002280
|
||||||
F src/update.c a7eeeaffad59c6506f01303a071dac11de8269ca
|
F src/update.c a7eeeaffad59c6506f01303a071dac11de8269ca
|
||||||
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
||||||
F src/util.c 6ed9d7bdd3b0a30742027b6d8e8e1a9e2b14f373
|
F src/util.c a64585a74aef6feb16dfe4e090b5de01e26eba3b
|
||||||
F src/vacuum.c feb1eabb20987983d9350cad98299b21fa811f52
|
F src/vacuum.c feb1eabb20987983d9350cad98299b21fa811f52
|
||||||
F src/vdbe.c 87ae3a5657fefed7875f3eb30e7ababd48013d71
|
F src/vdbe.c 87ae3a5657fefed7875f3eb30e7ababd48013d71
|
||||||
F src/vdbe.h c743791f723049db94f009e3e30958952bc2d512
|
F src/vdbe.h c743791f723049db94f009e3e30958952bc2d512
|
||||||
@@ -423,7 +423,7 @@ F src/vdbeblob.c 3b570b730109e8f653d9d2081649f6e7015113db
|
|||||||
F src/vdbemem.c 9b0cb32cc267ef026515f15a3594d5ff91fe4dfc
|
F src/vdbemem.c 9b0cb32cc267ef026515f15a3594d5ff91fe4dfc
|
||||||
F src/vdbesort.c 307460bfa4de4d1c3901fcd42089159131e34062
|
F src/vdbesort.c 307460bfa4de4d1c3901fcd42089159131e34062
|
||||||
F src/vdbetrace.c f75c5455d8cf389ef86a8bfdfd3177e0e3692484
|
F src/vdbetrace.c f75c5455d8cf389ef86a8bfdfd3177e0e3692484
|
||||||
F src/vtab.c 943c23b355f0a8f859f9583e7315d64bebdb0899
|
F src/vtab.c fd69fd398e23e57ea4ea377d8a44b6998fc569c7
|
||||||
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
||||||
F src/wal.c 10deb6b43887662691e5f53d10b3c171c401169b
|
F src/wal.c 10deb6b43887662691e5f53d10b3c171c401169b
|
||||||
F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c
|
F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c
|
||||||
@@ -1451,8 +1451,10 @@ 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 d8c94a46dfa94930732c2de2aa79675c5087d36e 519fd03b845c9b53df9e5397282df2e99f36a672
|
P 4b55c520f554163edc174e5995e66242f169cb04
|
||||||
R 4784b7c67e30974242406c3dce382bf0
|
R 124650c3359b5cb373643178bc007cde
|
||||||
T +closed 519fd03b845c9b53df9e5397282df2e99f36a672
|
T *branch * schema-storage
|
||||||
|
T *sym-schema-storage *
|
||||||
|
T -sym-trunk *
|
||||||
U drh
|
U drh
|
||||||
Z 5a7ee41f15f54141d2ddaa0e30d16756
|
Z 9b6160e72c73eb18b594df11fb333e9a
|
||||||
|
@@ -1 +1 @@
|
|||||||
4b55c520f554163edc174e5995e66242f169cb04
|
842b21162713bb141b845b01c136457a31af4ab0
|
@@ -786,7 +786,6 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
|
|||||||
Column *pCol = &pNew->aCol[i];
|
Column *pCol = &pNew->aCol[i];
|
||||||
pCol->zName = sqlite3DbStrDup(db, pCol->zName);
|
pCol->zName = sqlite3DbStrDup(db, pCol->zName);
|
||||||
pCol->zColl = 0;
|
pCol->zColl = 0;
|
||||||
pCol->zType = 0;
|
|
||||||
pCol->pDflt = 0;
|
pCol->pDflt = 0;
|
||||||
}
|
}
|
||||||
pNew->pSchema = db->aDb[iDb].pSchema;
|
pNew->pSchema = db->aDb[iDb].pSchema;
|
||||||
|
22
src/build.c
22
src/build.c
@@ -571,7 +571,6 @@ void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){
|
|||||||
for(i=0; i<pTable->nCol; i++, pCol++){
|
for(i=0; i<pTable->nCol; i++, pCol++){
|
||||||
sqlite3DbFree(db, pCol->zName);
|
sqlite3DbFree(db, pCol->zName);
|
||||||
sqlite3ExprDelete(db, pCol->pDflt);
|
sqlite3ExprDelete(db, pCol->pDflt);
|
||||||
sqlite3DbFree(db, pCol->zType);
|
|
||||||
sqlite3DbFree(db, pCol->zColl);
|
sqlite3DbFree(db, pCol->zColl);
|
||||||
}
|
}
|
||||||
sqlite3DbFree(db, pTable->aCol);
|
sqlite3DbFree(db, pTable->aCol);
|
||||||
@@ -1042,6 +1041,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
|
|||||||
Table *p;
|
Table *p;
|
||||||
int i;
|
int i;
|
||||||
char *z;
|
char *z;
|
||||||
|
char *zType;
|
||||||
Column *pCol;
|
Column *pCol;
|
||||||
sqlite3 *db = pParse->db;
|
sqlite3 *db = pParse->db;
|
||||||
if( (p = pParse->pNewTable)==0 ) return;
|
if( (p = pParse->pNewTable)==0 ) return;
|
||||||
@@ -1051,8 +1051,14 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
z = sqlite3NameFromToken(db, pName);
|
z = sqlite3DbMallocRaw(db, pName->n + pType->n + 2);
|
||||||
if( z==0 ) return;
|
if( z==0 ) return;
|
||||||
|
memcpy(z, pName->z, pName->n);
|
||||||
|
z[pName->n] = 0;
|
||||||
|
sqlite3Dequote(z);
|
||||||
|
zType = z + sqlite3Strlen30(z) + 1;
|
||||||
|
memcpy(zType, pType->z, pType->n);
|
||||||
|
zType[pType->n] = 0;
|
||||||
for(i=0; i<p->nCol; i++){
|
for(i=0; i<p->nCol; i++){
|
||||||
if( sqlite3_stricmp(z, p->aCol[i].zName)==0 ){
|
if( sqlite3_stricmp(z, p->aCol[i].zName)==0 ){
|
||||||
sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
|
sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
|
||||||
@@ -1080,8 +1086,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
|
|||||||
pCol->affinity = SQLITE_AFF_BLOB;
|
pCol->affinity = SQLITE_AFF_BLOB;
|
||||||
pCol->szEst = 1;
|
pCol->szEst = 1;
|
||||||
}else{
|
}else{
|
||||||
pCol->zType = sqlite3NameFromToken(pParse->db, pType);
|
pCol->affinity = sqlite3AffinityType(zType, &pCol->szEst);
|
||||||
pCol->affinity = sqlite3AffinityType(pCol->zType, &pCol->szEst);
|
|
||||||
}
|
}
|
||||||
p->nCol++;
|
p->nCol++;
|
||||||
pParse->constraintName.n = 0;
|
pParse->constraintName.n = 0;
|
||||||
@@ -1277,7 +1282,7 @@ void sqlite3AddPrimaryKey(
|
|||||||
int sortOrder /* SQLITE_SO_ASC or SQLITE_SO_DESC */
|
int sortOrder /* SQLITE_SO_ASC or SQLITE_SO_DESC */
|
||||||
){
|
){
|
||||||
Table *pTab = pParse->pNewTable;
|
Table *pTab = pParse->pNewTable;
|
||||||
char *zType = 0;
|
const char *zName = 0;
|
||||||
int iCol = -1, i;
|
int iCol = -1, i;
|
||||||
int nTerm;
|
int nTerm;
|
||||||
if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit;
|
if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit;
|
||||||
@@ -1290,7 +1295,7 @@ void sqlite3AddPrimaryKey(
|
|||||||
if( pList==0 ){
|
if( pList==0 ){
|
||||||
iCol = pTab->nCol - 1;
|
iCol = pTab->nCol - 1;
|
||||||
pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY;
|
pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY;
|
||||||
zType = pTab->aCol[iCol].zType;
|
zName = pTab->aCol[iCol].zName;
|
||||||
nTerm = 1;
|
nTerm = 1;
|
||||||
}else{
|
}else{
|
||||||
nTerm = pList->nExpr;
|
nTerm = pList->nExpr;
|
||||||
@@ -1303,7 +1308,7 @@ void sqlite3AddPrimaryKey(
|
|||||||
for(iCol=0; iCol<pTab->nCol; iCol++){
|
for(iCol=0; iCol<pTab->nCol; iCol++){
|
||||||
if( sqlite3StrICmp(zCName, pTab->aCol[iCol].zName)==0 ){
|
if( sqlite3StrICmp(zCName, pTab->aCol[iCol].zName)==0 ){
|
||||||
pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY;
|
pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY;
|
||||||
zType = pTab->aCol[iCol].zType;
|
zName = pTab->aCol[iCol].zName;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1311,7 +1316,8 @@ void sqlite3AddPrimaryKey(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( nTerm==1
|
if( nTerm==1
|
||||||
&& zType && sqlite3StrICmp(zType, "INTEGER")==0
|
&& zName
|
||||||
|
&& sqlite3StrICmp(sqlite3StrNext(zName), "INTEGER")==0
|
||||||
&& sortOrder!=SQLITE_SO_DESC
|
&& sortOrder!=SQLITE_SO_DESC
|
||||||
){
|
){
|
||||||
pTab->iPKey = iCol;
|
pTab->iPKey = iCol;
|
||||||
|
@@ -3335,7 +3335,8 @@ int sqlite3_table_column_metadata(
|
|||||||
** explicitly declared column. Copy meta information from *pCol.
|
** explicitly declared column. Copy meta information from *pCol.
|
||||||
*/
|
*/
|
||||||
if( pCol ){
|
if( pCol ){
|
||||||
zDataType = pCol->zType;
|
zDataType = sqlite3StrNext(pCol->zName);
|
||||||
|
if( zDataType[0]==0 ) zDataType = 0;
|
||||||
zCollSeq = pCol->zColl;
|
zCollSeq = pCol->zColl;
|
||||||
notnull = pCol->notNull!=0;
|
notnull = pCol->notNull!=0;
|
||||||
primarykey = (pCol->colFlags & COLFLAG_PRIMKEY)!=0;
|
primarykey = (pCol->colFlags & COLFLAG_PRIMKEY)!=0;
|
||||||
|
@@ -1065,6 +1065,7 @@ void sqlite3Pragma(
|
|||||||
setAllColumnNames(v, 6, azCol); assert( 6==ArraySize(azCol) );
|
setAllColumnNames(v, 6, azCol); assert( 6==ArraySize(azCol) );
|
||||||
sqlite3ViewGetColumnNames(pParse, pTab);
|
sqlite3ViewGetColumnNames(pParse, pTab);
|
||||||
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
|
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
|
||||||
|
const char *zName;
|
||||||
if( IsHiddenColumn(pCol) ){
|
if( IsHiddenColumn(pCol) ){
|
||||||
nHidden++;
|
nHidden++;
|
||||||
continue;
|
continue;
|
||||||
@@ -1077,10 +1078,11 @@ void sqlite3Pragma(
|
|||||||
for(k=1; k<=pTab->nCol && pPk->aiColumn[k-1]!=i; k++){}
|
for(k=1; k<=pTab->nCol && pPk->aiColumn[k-1]!=i; k++){}
|
||||||
}
|
}
|
||||||
assert( pCol->pDflt==0 || pCol->pDflt->op==TK_SPAN );
|
assert( pCol->pDflt==0 || pCol->pDflt->op==TK_SPAN );
|
||||||
|
zName = pCol->zName;
|
||||||
sqlite3VdbeMultiLoad(v, 1, "issisi",
|
sqlite3VdbeMultiLoad(v, 1, "issisi",
|
||||||
i-nHidden,
|
i-nHidden,
|
||||||
pCol->zName,
|
zName,
|
||||||
pCol->zType ? pCol->zType : "",
|
sqlite3StrNext(zName),
|
||||||
pCol->notNull ? 1 : 0,
|
pCol->notNull ? 1 : 0,
|
||||||
pCol->pDflt ? pCol->pDflt->u.zToken : 0,
|
pCol->pDflt ? pCol->pDflt->u.zToken : 0,
|
||||||
k);
|
k);
|
||||||
|
@@ -1429,8 +1429,8 @@ static const char *columnTypeImpl(
|
|||||||
zType = "INTEGER";
|
zType = "INTEGER";
|
||||||
zOrigCol = "rowid";
|
zOrigCol = "rowid";
|
||||||
}else{
|
}else{
|
||||||
zType = pTab->aCol[iCol].zType;
|
|
||||||
zOrigCol = pTab->aCol[iCol].zName;
|
zOrigCol = pTab->aCol[iCol].zName;
|
||||||
|
zType = sqlite3StrNext(zOrigCol);
|
||||||
estWidth = pTab->aCol[iCol].szEst;
|
estWidth = pTab->aCol[iCol].szEst;
|
||||||
}
|
}
|
||||||
zOrigTab = pTab->zName;
|
zOrigTab = pTab->zName;
|
||||||
@@ -1442,7 +1442,7 @@ static const char *columnTypeImpl(
|
|||||||
if( iCol<0 ){
|
if( iCol<0 ){
|
||||||
zType = "INTEGER";
|
zType = "INTEGER";
|
||||||
}else{
|
}else{
|
||||||
zType = pTab->aCol[iCol].zType;
|
zType = sqlite3StrNext(pTab->aCol[iCol].zName);
|
||||||
estWidth = pTab->aCol[iCol].szEst;
|
estWidth = pTab->aCol[iCol].szEst;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1727,10 +1727,7 @@ static void selectAddColumnTypeAndCollation(
|
|||||||
a = pSelect->pEList->a;
|
a = pSelect->pEList->a;
|
||||||
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
|
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
|
||||||
p = a[i].pExpr;
|
p = a[i].pExpr;
|
||||||
if( pCol->zType==0 ){
|
columnType(&sNC, p, 0, 0, 0, &pCol->szEst);
|
||||||
pCol->zType = sqlite3DbStrDup(db,
|
|
||||||
columnType(&sNC, p,0,0,0, &pCol->szEst));
|
|
||||||
}
|
|
||||||
szAll += pCol->szEst;
|
szAll += pCol->szEst;
|
||||||
pCol->affinity = sqlite3ExprAffinity(p);
|
pCol->affinity = sqlite3ExprAffinity(p);
|
||||||
if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_BLOB;
|
if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_BLOB;
|
||||||
|
@@ -1543,9 +1543,8 @@ struct Module {
|
|||||||
** of this structure.
|
** of this structure.
|
||||||
*/
|
*/
|
||||||
struct Column {
|
struct Column {
|
||||||
char *zName; /* Name of this column */
|
char *zName; /* Name of this column, \000, then the type */
|
||||||
Expr *pDflt; /* Default value of this column */
|
Expr *pDflt; /* Default value of this column */
|
||||||
char *zType; /* Data type for this column */
|
|
||||||
char *zColl; /* Collating sequence. If NULL, use the default */
|
char *zColl; /* Collating sequence. If NULL, use the default */
|
||||||
u8 notNull; /* An OE_ code for handling a NOT NULL constraint */
|
u8 notNull; /* An OE_ code for handling a NOT NULL constraint */
|
||||||
char affinity; /* One of the SQLITE_AFF_... values */
|
char affinity; /* One of the SQLITE_AFF_... values */
|
||||||
@@ -3258,6 +3257,7 @@ int sqlite3IsIdChar(u8);
|
|||||||
*/
|
*/
|
||||||
int sqlite3StrICmp(const char*,const char*);
|
int sqlite3StrICmp(const char*,const char*);
|
||||||
int sqlite3Strlen30(const char*);
|
int sqlite3Strlen30(const char*);
|
||||||
|
const char *sqlite3StrNext(const char*);
|
||||||
#define sqlite3StrNICmp sqlite3_strnicmp
|
#define sqlite3StrNICmp sqlite3_strnicmp
|
||||||
|
|
||||||
int sqlite3MallocInit(void);
|
int sqlite3MallocInit(void);
|
||||||
|
@@ -109,6 +109,14 @@ int sqlite3Strlen30(const char *z){
|
|||||||
return 0x3fffffff & (int)strlen(z);
|
return 0x3fffffff & (int)strlen(z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** The string z[] is followed immediately by another string. Return
|
||||||
|
** a poiner to that other string.
|
||||||
|
*/
|
||||||
|
const char *sqlite3StrNext(const char *z){
|
||||||
|
return z + strlen(z) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Set the current error code to err_code and clear any prior error message.
|
** Set the current error code to err_code and clear any prior error message.
|
||||||
*/
|
*/
|
||||||
|
@@ -564,10 +564,10 @@ static int vtabCallConstructor(
|
|||||||
pTab->pVTable = pVTable;
|
pTab->pVTable = pVTable;
|
||||||
|
|
||||||
for(iCol=0; iCol<pTab->nCol; iCol++){
|
for(iCol=0; iCol<pTab->nCol; iCol++){
|
||||||
char *zType = pTab->aCol[iCol].zType;
|
char *zType = (char*)sqlite3StrNext(pTab->aCol[iCol].zName);
|
||||||
int nType;
|
int nType;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
if( !zType ){
|
if( !zType[0] ){
|
||||||
pTab->tabFlags |= oooHidden;
|
pTab->tabFlags |= oooHidden;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user