diff --git a/main.mk b/main.mk index def00e9668..6771acf046 100644 --- a/main.mk +++ b/main.mk @@ -54,7 +54,7 @@ TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I. -I$(TOP)/src # Object files for the SQLite library. # -LIBOBJ = attach.o auth.o btree.o build.o copy.o date.o delete.o \ +LIBOBJ = attach.o auth.o btree.o build.o date.o delete.o \ expr.o func.o hash.o insert.o \ main.o opcodes.o os_mac.o os_unix.o os_win.o \ pager.o parse.o pragma.o printf.o random.o \ @@ -70,7 +70,6 @@ SRC = \ $(TOP)/src/btree.c \ $(TOP)/src/btree.h \ $(TOP)/src/build.c \ - $(TOP)/src/copy.c \ $(TOP)/src/date.c \ $(TOP)/src/delete.c \ $(TOP)/src/encode.c \ @@ -219,9 +218,6 @@ config.h: echo >>config.h rm -f temp.c temp -copy.o: $(TOP)/src/copy.c $(HDR) - $(TCCX) -c $(TOP)/src/copy.c - date.o: $(TOP)/src/date.c $(HDR) $(TCCX) -c $(TOP)/src/date.c diff --git a/manifest b/manifest index 4bed021c5d..86bad0e3f1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\sthe\sC\sfunction\sused\sto\stest\ssqlite3_create_function()\sfrom\sTcl.\s(CVS\s1476) -D 2004-05-27T14:23:36 +C Remove\sthe\sCOPY\scommand.\s(CVS\s1477) +D 2004-05-27T17:22:55 F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd @@ -16,7 +16,7 @@ F doc/lemon.html f0f682f50210928c07e562621c3b7e8ab912a538 F doc/report1.txt a031aaf37b185e4fa540223cb516d3bccec7eeac F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 F ltmain.sh f6b283068efa69f06eb8aa1fe4bddfdbdeb35826 -F main.mk 466f12b816527d5bb1cf5dac4f23da77a02f99ad +F main.mk d742c15aa8fac4a83aa807a7c47c76e5ea9af089 F publish.sh 1cd5c982388560fa91eedf6a338e210f713b35c8 F spec.template a38492f1c1dd349fc24cb0565e08afc53045304b F sqlite.1 83f4a9d37bdf2b7ef079a82d54eaf2e3509ee6ea @@ -27,7 +27,6 @@ F src/auth.c 5c2f0bea4729c98c2be3b69d6b466fc51448fe79 F src/btree.c 6db76fbf63efd6008c5e6cb038ea40f94abffcf7 F src/btree.h b65140b5ae891f30d2a39e64b9f0343225553545 F src/build.c 35cbeb439b49cca5eb5e8a1de010a5194f4523e8 -F src/copy.c 6eb7cc08ae6dc60bf83ecadf4508a0bef909dbd2 F src/date.c 0eb922af5c5f5e2455f8dc2f98023ed3e04a857e F src/delete.c 66c5ab98cbad7e6b315fc997bfe6c8080784a701 F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37 @@ -49,14 +48,14 @@ F src/os_win.c 92b51a38437b98d8aa3ac05b57c71e1d1092e5be F src/os_win.h 5d41af24caaef6c13a2d8e2399caa1c57d45c84d F src/pager.c 6ff6b906427d4824099140776cb8768f922f3dc5 F src/pager.h 78a00ac280899bcba1a89dc51585dcae6b7b3253 -F src/parse.y 1a39b21982af48cf5c61a4085eece9cab84f9b71 +F src/parse.y 63d39b6fe17d0c2c2c1f691e75a119a71d25439a F src/pragma.c f2b05b087a5764802296a28d7abdd75728beedee F src/printf.c ef750e8e2398ca7e8b58be991075f08c6a7f0e53 F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3 F src/select.c 2ba142a490ab2777b6a086e7c0d078a952331109 F src/shell.c ed4d237b3e52a0a42512bfcc53530e46de20c28f F src/sqlite.h.in cda883efb11c6f767eaf3fea06b3e3419d9cfe7f -F src/sqliteInt.h 9c528cc7a41efafb0443655d29eafd10d8378952 +F src/sqliteInt.h 7978f406b41819f37fb6fb1be64115a2e7a28ab5 F src/table.c af14284fa36c8d41f6829e3f2819dce07d3e2de2 F src/tclsqlite.c 877d0b96013a25b03ed6bd2d32917c42e84403bc F src/test1.c 32934478366531503d634968db414df17cb38238 @@ -64,13 +63,13 @@ F src/test2.c 6195a1ca2c8d0d2d93644e86da3289b403486872 F src/test3.c 5e4a6d596f982f6f47a5f9f75ede9b4a3b739968 F src/test4.c 34848a9fd31aa65857b20a8bfc03aff77d8c3426 F src/test5.c 9a1f15133f6955f067c5246e564723b5f23ff221 -F src/tokenize.c d40f90119182bf1a026a008453f28fcc6b101738 +F src/tokenize.c 76eebcab0fad3e983935f833de757818a866a64f F src/trigger.c 11afe9abfba13a2ba142944c797c952e162d117f F src/update.c 96461bcf4e946697e83c09c77c7e61b545a2f66e F src/utf.c 59b5c8f06a4384a9f64933d6c57a2de02ce3673b F src/util.c d299404febd509556e720fbecadd880756b0f899 F src/vacuum.c 8734f89742f246abd91dbd3e087fc153bddbfbad -F src/vdbe.c 54a758cc50b7eb9fe67fab9f2804d3b900536538 +F src/vdbe.c 2f2c9859ad19836b31825d2d70c4a8e6a9eba0d1 F src/vdbe.h e73f890e0f2a6c42b183d7d6937947930fe4fdeb F src/vdbeInt.h fab8bb7f7a7f4e0714d9b3217c3db97366e16b99 F src/vdbeapi.c b0bb1f98c899ba00c8a5cbca612c2a28a1bb79de @@ -80,7 +79,7 @@ F src/where.c efe5d25fe18cd7381722457898cd863e84097a0c F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242 F test/attach.test cb9b884344e6cfa5e165965d5b1adea679a24c83 F test/attach2.test 5472d442bb2ef1ee587e0ae7472bb68b52509a38 -F test/auth.test 5c4d95cdaf539c0c236e20ce1f71a93e7dde9185 +F test/auth.test 95809b8f6a9bec18b94d28cafd03fe27d2f8a9e9 F test/bigfile.test ea904b853ce2d703b16c5ce90e2b54951bc1ae81 F test/bigrow.test 8ab252dba108f12ad64e337b0f2ff31a807ac578 F test/bind.test 4f5a19e84077b61ea797644b4942bb98b17bdd42 @@ -93,32 +92,30 @@ F test/btree6.test a5ede6bfbbb2ec8b27e62813612c0f28e8f3e027 F test/capi2.test 8fb64e8ab7f78b8254cd4d04bb96822167f731b2 F test/capi3.test 3d4d431c3b889893504d59064a018642013fd740 F test/conflict.test 0911bb2f079046914a6e9c3341b36658c4e2103e -F test/copy.test f07ea8d60878da7a67416ab62f78e9706b9d3c45 F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2 F test/date.test aed5030482ebc02bd8d386c6c86a29f694ab068d -F test/delete.test 92256384f1801760180ded129f7427884cf28886 +F test/delete.test ddb1d4e172a01c0165804f82f81df556fb48a856 F test/enc.test a55481d45ff493804e8d88357feb4642fc50a6b2 -F test/enc2.test 669f46b4e298a22fb515cb52c55eb8dca57d8b4a +F test/enc2.test 8ab83839b73ce3a571b1396379f2f8ae3c895d74 F test/expr.test 8b62f3fcac64fbd5c3d43d7a7984245743dcbe65 F test/fkey1.test d65c824459916249bee501532d6154ddab0b5db7 -F test/format3.test 149cc166c97923fa60def047e90dd3fb32bba916 F test/func.test b6d87075ff65babd6466b8a8dfc0d44f6a92df0c F test/hook.test 1a67ce0cd64a6455d016962542f2822458dccc49 -F test/in.test 0de39b02ceeca90993b096822fb5a884661c5b47 +F test/in.test b92a2df9162e1cbd33c6449a29a05e6955b1741a F test/index.test 3d50e19807186682de60c53f507a831c1b4a38a2 F test/insert.test 6ec324659656f4a86e4abfcf1a1fd2795ba6b603 F test/insert2.test c288375a64dad3295044714f0dfed4a193cf067f F test/interrupt.test 9142ce4448605127640eda5e283952f75f67ed91 -F test/intpkey.test 9320af48415c594afd4e15f8ef0daa272e05502e +F test/intpkey.test e93d739c8a49f5f63748d4ed1c8084c33dc4c0a1 F test/ioerr.test 5dbaf09f96b56ee01cf3edd762b96eb4ad2c9ca4 F test/join.test 9ef6aabaac9de51d5fc41e68d1f4355da05a84cd F test/join2.test c97e4c5aa65dea462145529e58212a709b4722b8 F test/lastinsert.test 31382f88b9b0270333ac9e4a17f2c2f4732da718 F test/laststmtchanges.test cabd11bdfbaf73a4486c50b58297d9c2038ccc18 -F test/limit.test 94c5dca1e81b7503ce90262ec5a2dc6c4e38d313 +F test/limit.test 60d7f856ee7846f7130dee67f10f0e726cd70b5d F test/lock.test 226ef831dad60ad4d200dc83e25479ba952aac7e F test/main.test 6a851b5992c4881a725a3d9647e629199df8de9d -F test/malloc.test 2cfcffb7c858640e01e6520ee1cd54ca57d98e80 +F test/malloc.test 4e19b96d9cd7d61f4826e6fce03849ad5ad526dd F test/memdb.test 6ece25c7c0e6500199d3662607a3edca081abb2a F test/memleak.test 4d5d374c8ea1fc5ac634aed58cac1047848ce65e F test/minmax.test 9dcf52f713b1b9e61d0a88a51eb8bb2e3c52d0ab @@ -137,12 +134,12 @@ F test/quick.test 8800cd2f6b45ce2cafadb0e3d5161688c61c946a F test/quote.test 08f23385c685d3dc7914ec760d492cacea7f6e3d F test/rowid.test 863e6e75878cccf03d166fe52023f20e09508683 F test/select1.test 3bfcccd2eadcddbb07f1f5da6550aee8484ea4fb -F test/select2.test bafe576b76616f101c06a780a8155d5a6c363127 -F test/select3.test 9779f01f68bb3804261331557047e5a3334ce5b0 -F test/select4.test d2443e558c5013b22eaa25533fa22ef0ff0b1095 -F test/select5.test c2a6c4a003316ee42cbbd689eebef8fdce0db2ac +F test/select2.test a7226dc9de4ae713943a408bb8f9d3de46ee8015 +F test/select3.test f8ff60d98c7b4898f5e7326f0c5929ba56f5d047 +F test/select4.test 86e72fc3b07de4fe11439aa419e37db3c49467e2 +F test/select5.test 3f3f0f31e674fa61f8a3bdb6af1517dfae674081 F test/select6.test a9e31906e700e7c7592c4d0acfc022808f718baf -F test/sort.test 0ed7ff33d8435dde289342d0a5fed662f762f700 +F test/sort.test 863f07884fb68a70b738998e9a548132a0d0b7d9 F test/subselect.test f0fea8cf9f386d416d64d152e3c65f9116d0f50f F test/table.test 71f808817b50ae3a9a693a88b3ea003f1031cdbb F test/tableapi.test e0c4cce61e58343caa84dab33fa6823cb35fe1e1 @@ -206,7 +203,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 -P 42247b2fb0c94e75a432b3e067fff9a1be328fc8 -R 7d62fd5bc03776e1e9a987c53ee143b8 -U danielk1977 -Z b23a568694419f227d6a8be83fed4002 +P c85e5f1528d098ea330ed0cf7e3c01cf9be93c10 +R 0f424c162c35b47a72bb56f63064dff2 +U drh +Z 4f618cbd73c341429c69a19968301445 diff --git a/manifest.uuid b/manifest.uuid index f909effd99..1e9ff0d83b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c85e5f1528d098ea330ed0cf7e3c01cf9be93c10 \ No newline at end of file +287f86731c71401dbac098e08357367b4f8e5a43 \ No newline at end of file diff --git a/src/copy.c b/src/copy.c deleted file mode 100644 index c12de507db..0000000000 --- a/src/copy.c +++ /dev/null @@ -1,113 +0,0 @@ -/* -** 2003 April 6 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains code used to implement the COPY command. -** -** $Id: copy.c,v 1.13 2004/05/26 10:11:05 danielk1977 Exp $ -*/ -#include "sqliteInt.h" - -/* -** The COPY command is for compatibility with PostgreSQL and specificially -** for the ability to read the output of pg_dump. The format is as -** follows: -** -** COPY table FROM file [USING DELIMITERS string] -** -** "table" is an existing table name. We will read lines of code from -** file to fill this table with data. File might be "stdin". The optional -** delimiter string identifies the field separators. The default is a tab. -*/ -void sqlite3Copy( - Parse *pParse, /* The parser context */ - SrcList *pTableName, /* The name of the table into which we will insert */ - Token *pFilename, /* The file from which to obtain information */ - Token *pDelimiter, /* Use this as the field delimiter */ - int onError /* What to do if a constraint fails */ -){ - Table *pTab; - int i; - Vdbe *v; - int addr, end; - char *zFile = 0; - const char *zDb; - sqlite *db = pParse->db; - - - if( sqlite3_malloc_failed ) goto copy_cleanup; - assert( pTableName->nSrc==1 ); - pTab = sqlite3SrcListLookup(pParse, pTableName); - if( pTab==0 || sqlite3IsReadOnly(pParse, pTab, 0) ) goto copy_cleanup; - zFile = sqliteStrNDup(pFilename->z, pFilename->n); - sqlite3Dequote(zFile); - assert( pTab->iDbnDb ); - zDb = db->aDb[pTab->iDb].zName; - if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) - || sqlite3AuthCheck(pParse, SQLITE_COPY, pTab->zName, zFile, zDb) ){ - goto copy_cleanup; - } - v = sqlite3GetVdbe(pParse); - if( v ){ - sqlite3BeginWriteOperation(pParse, 1, pTab->iDb); - addr = sqlite3VdbeOp3(v, OP_FileOpen, 0, 0, pFilename->z, pFilename->n); - sqlite3VdbeDequoteP3(v, addr); - sqlite3OpenTableAndIndices(pParse, pTab, 0); - if( db->flags & SQLITE_CountRows ){ - sqlite3VdbeAddOp(v, OP_Integer, 0, 0); /* Initialize the row count */ - } - end = sqlite3VdbeMakeLabel(v); - addr = sqlite3VdbeAddOp(v, OP_FileRead, pTab->nCol, end); - if( pDelimiter ){ - sqlite3VdbeChangeP3(v, addr, pDelimiter->z, pDelimiter->n); - sqlite3VdbeDequoteP3(v, addr); - }else{ - sqlite3VdbeChangeP3(v, addr, "\t", 1); - } - if( pTab->iPKey>=0 ){ - sqlite3VdbeAddOp(v, OP_FileColumn, pTab->iPKey, 0); - sqlite3VdbeAddOp(v, OP_MustBeInt, 0, 0); - }else{ - sqlite3VdbeAddOp(v, OP_NewRecno, 0, 0); - } - for(i=0; inCol; i++){ - if( i==pTab->iPKey ){ - /* The integer primary key column is filled with NULL since its - ** value is always pulled from the record number */ - sqlite3VdbeAddOp(v, OP_String, 0, 0); - }else{ - sqlite3VdbeAddOp(v, OP_FileColumn, i, 0); - } - } - sqlite3GenerateConstraintChecks(pParse, pTab, 0, 0, pTab->iPKey>=0, - 0, onError, addr); - sqlite3CompleteInsertion(pParse, pTab, 0, 0, 0, 0, -1); - if( (db->flags & SQLITE_CountRows)!=0 ){ - sqlite3VdbeAddOp(v, OP_AddImm, 1, 0); /* Increment row count */ - } - sqlite3VdbeAddOp(v, OP_Goto, 0, addr); - sqlite3VdbeResolveLabel(v, end); - sqlite3VdbeAddOp(v, OP_Noop, 0, 0); - sqlite3EndWriteOperation(pParse); - if( db->flags & SQLITE_CountRows ){ - sqlite3VdbeAddOp(v, OP_Callback, 1, 0); - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, "rows inserted", P3_STATIC); - } - } - -copy_cleanup: - sqlite3SrcListDelete(pTableName); - sqliteFree(zFile); - return; -} - - - diff --git a/src/parse.y b/src/parse.y index 176f33e5ae..4a0657bbf5 100644 --- a/src/parse.y +++ b/src/parse.y @@ -14,7 +14,7 @@ ** the parser. Lemon will also generate a header file containing ** numeric codes for all of the tokens. ** -** @(#) $Id: parse.y,v 1.118 2004/05/27 09:28:43 danielk1977 Exp $ +** @(#) $Id: parse.y,v 1.119 2004/05/27 17:22:55 drh Exp $ */ %token_prefix TK_ %token_type {Token} @@ -122,7 +122,7 @@ id(A) ::= ID(X). {A = X;} // %fallback ID ABORT AFTER ASC ATTACH BEFORE BEGIN CASCADE CLUSTER CONFLICT - COPY DATABASE DEFERRED DELIMITERS DESC DETACH EACH END EXPLAIN FAIL FOR + DATABASE DEFERRED DESC DETACH EACH END EXPLAIN FAIL FOR GLOB IGNORE IMMEDIATE INITIALLY INSTEAD LIKE MATCH KEY OF OFFSET PRAGMA RAISE REPLACE RESTRICT ROW STATEMENT TEMP TRIGGER VACUUM VIEW. @@ -758,14 +758,6 @@ cmd ::= DROP INDEX nm(X) dbnm(Y). { sqlite3DropIndex(pParse, sqlite3SrcListAppend(0,&X,&Y)); } - -///////////////////////////// The COPY command /////////////////////////////// -// -cmd ::= COPY orconf(R) nm(X) dbnm(D) FROM nm(Y) USING DELIMITERS STRING(Z). - {sqlite3Copy(pParse,sqlite3SrcListAppend(0,&X,&D),&Y,&Z,R);} -cmd ::= COPY orconf(R) nm(X) dbnm(D) FROM nm(Y). - {sqlite3Copy(pParse,sqlite3SrcListAppend(0,&X,&D),&Y,0,R);} - ///////////////////////////// The VACUUM command ///////////////////////////// // cmd ::= VACUUM. {sqlite3Vacuum(pParse,0);} diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 270d38382b..454d4d4f4b 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -11,7 +11,7 @@ ************************************************************************* ** Internal interface definitions for SQLite. ** -** @(#) $Id: sqliteInt.h,v 1.255 2004/05/27 13:35:20 danielk1977 Exp $ +** @(#) $Id: sqliteInt.h,v 1.256 2004/05/27 17:22:56 drh Exp $ */ #include "config.h" #include "sqlite.h" @@ -1244,7 +1244,6 @@ Table *sqlite3FindTable(sqlite*,const char*, const char*); Table *sqlite3LocateTable(Parse*,const char*, const char*); Index *sqlite3FindIndex(sqlite*,const char*, const char*); void sqlite3UnlinkAndDeleteIndex(sqlite*,Index*); -void sqlite3Copy(Parse*, SrcList*, Token*, Token*, int); void sqlite3Vacuum(Parse*, Token*); int sqlite3RunVacuum(char**, sqlite*); int sqlite3GlobCompare(const unsigned char*,const unsigned char*); diff --git a/src/tokenize.c b/src/tokenize.c index 77d7600031..08860b4cee 100644 --- a/src/tokenize.c +++ b/src/tokenize.c @@ -15,7 +15,7 @@ ** individual tokens and sends those tokens one-by-one over to the ** parser for analysis. ** -** $Id: tokenize.c,v 1.72 2004/05/27 13:35:20 danielk1977 Exp $ +** $Id: tokenize.c,v 1.73 2004/05/27 17:22:56 drh Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -57,7 +57,6 @@ static Keyword aKeywordTable[] = { { "COMMIT", TK_COMMIT, }, { "CONFLICT", TK_CONFLICT, }, { "CONSTRAINT", TK_CONSTRAINT, }, - { "COPY", TK_COPY, }, { "CREATE", TK_CREATE, }, { "CROSS", TK_JOIN_KW, }, { "DATABASE", TK_DATABASE, }, @@ -65,7 +64,6 @@ static Keyword aKeywordTable[] = { { "DEFERRED", TK_DEFERRED, }, { "DEFERRABLE", TK_DEFERRABLE, }, { "DELETE", TK_DELETE, }, - { "DELIMITERS", TK_DELIMITERS, }, { "DESC", TK_DESC, }, { "DETACH", TK_DETACH, }, { "DISTINCT", TK_DISTINCT, }, @@ -696,6 +694,3 @@ int sqlite3_complete(const char *zSql){ } return state==0; } - - - diff --git a/src/vdbe.c b/src/vdbe.c index 42a2266b0e..c7ee88962b 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -43,7 +43,7 @@ ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** -** $Id: vdbe.c,v 1.339 2004/05/27 09:28:43 danielk1977 Exp $ +** $Id: vdbe.c,v 1.340 2004/05/27 17:22:56 drh Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -4251,180 +4251,6 @@ case OP_SortReset: { break; } -/* Opcode: FileOpen * * P3 -** -** Open the file named by P3 for reading using the FileRead opcode. -** If P3 is "stdin" then open standard input for reading. -*/ -case OP_FileOpen: { - assert( pOp->p3!=0 ); - if( p->pFile ){ - if( p->pFile!=stdin ) fclose(p->pFile); - p->pFile = 0; - } - if( sqlite3StrICmp(pOp->p3,"stdin")==0 ){ - p->pFile = stdin; - }else{ - p->pFile = fopen(pOp->p3, "r"); - } - if( p->pFile==0 ){ - sqlite3SetString(&p->zErrMsg,"unable to open file: ", pOp->p3, (char*)0); - rc = SQLITE_ERROR; - } - break; -} - -/* Opcode: FileRead P1 P2 P3 -** -** Read a single line of input from the open file (the file opened using -** FileOpen). If we reach end-of-file, jump immediately to P2. If -** we are able to get another line, split the line apart using P3 as -** a delimiter. There should be P1 fields. If the input line contains -** more than P1 fields, ignore the excess. If the input line contains -** fewer than P1 fields, assume the remaining fields contain NULLs. -** -** Input ends if a line consists of just "\.". A field containing only -** "\N" is a null field. The backslash \ character can be used be used -** to escape newlines or the delimiter. -*/ -case OP_FileRead: { - int n, eol, nField, i, c, nDelim; - char *zDelim, *z; - CHECK_FOR_INTERRUPT; - if( p->pFile==0 ) goto fileread_jump; - nField = pOp->p1; - if( nField<=0 ) goto fileread_jump; - if( nField!=p->nField || p->azField==0 ){ - char **azField = sqliteRealloc(p->azField, sizeof(char*)*nField+1); - if( azField==0 ){ goto no_mem; } - p->azField = azField; - p->nField = nField; - } - n = 0; - eol = 0; - while( eol==0 ){ - if( p->zLine==0 || n+200>p->nLineAlloc ){ - char *zLine; - p->nLineAlloc = p->nLineAlloc*2 + 300; - zLine = sqliteRealloc(p->zLine, p->nLineAlloc); - if( zLine==0 ){ - p->nLineAlloc = 0; - sqliteFree(p->zLine); - p->zLine = 0; - goto no_mem; - } - p->zLine = zLine; - } - if( vdbe_fgets(&p->zLine[n], p->nLineAlloc-n, p->pFile)==0 ){ - eol = 1; - p->zLine[n] = 0; - }else{ - int c; - while( (c = p->zLine[n])!=0 ){ - if( c=='\\' ){ - if( p->zLine[n+1]==0 ) break; - n += 2; - }else if( c=='\n' ){ - p->zLine[n] = 0; - eol = 1; - break; - }else{ - n++; - } - } - } - } - if( n==0 ) goto fileread_jump; - z = p->zLine; - if( z[0]=='\\' && z[1]=='.' && z[2]==0 ){ - goto fileread_jump; - } - zDelim = pOp->p3; - if( zDelim==0 ) zDelim = "\t"; - c = zDelim[0]; - nDelim = strlen(zDelim); - p->azField[0] = z; - for(i=1; *z!=0 && i<=nField; i++){ - int from, to; - from = to = 0; - if( z[0]=='\\' && z[1]=='N' - && (z[2]==0 || strncmp(&z[2],zDelim,nDelim)==0) ){ - if( i<=nField ) p->azField[i-1] = 0; - z += 2 + nDelim; - if( iazField[i] = z; - continue; - } - while( z[from] ){ - if( z[from]=='\\' && z[from+1]!=0 ){ - int tx = z[from+1]; - switch( tx ){ - case 'b': tx = '\b'; break; - case 'f': tx = '\f'; break; - case 'n': tx = '\n'; break; - case 'r': tx = '\r'; break; - case 't': tx = '\t'; break; - case 'v': tx = '\v'; break; - default: break; - } - z[to++] = tx; - from += 2; - continue; - } - if( z[from]==c && strncmp(&z[from],zDelim,nDelim)==0 ) break; - z[to++] = z[from++]; - } - if( z[from] ){ - z[to] = 0; - z += from + nDelim; - if( iazField[i] = z; - }else{ - z[to] = 0; - z = ""; - } - } - while( iazField[i++] = 0; - } - break; - - /* If we reach end-of-file, or if anything goes wrong, jump here. - ** This code will cause a jump to P2 */ -fileread_jump: - pc = pOp->p2 - 1; - break; -} - -/* Opcode: FileColumn P1 * * -** -** Push onto the stack the P1-th column of the most recently read line -** from the input file. -*/ -case OP_FileColumn: { -/* -** FIX ME: This will be deleted, but loads of test case files have -** to be updated first... -*/ - int i = pOp->p1; - char *z; - assert( i>=0 && inField ); - if( p->azField ){ - z = p->azField[i]; - }else{ - z = 0; - } - pTos++; - if( z ){ - pTos->n = strlen(z); - pTos->z = z; - pTos->flags = MEM_Str | MEM_Ephem | MEM_Term; - pTos->enc = TEXT_Utf8; - sqlite3VdbeChangeEncoding(pTos, db->enc); - }else{ - pTos->flags = MEM_Null; - } - break; -} - /* Opcode: MemStore P1 P2 * ** ** Write the top of the stack into memory location P1. diff --git a/test/auth.test b/test/auth.test index c88415792e..888e5a1d9d 100644 --- a/test/auth.test +++ b/test/auth.test @@ -12,7 +12,7 @@ # focus of this script is testing the ATTACH and DETACH commands # and related functionality. # -# $Id: auth.test,v 1.12 2003/12/07 00:24:35 drh Exp $ +# $Id: auth.test,v 1.13 2004/05/27 17:22:56 drh Exp $ # set testdir [file dirname $argv0] @@ -417,57 +417,6 @@ do_test auth-1.53 { catchsql {SELECT * FROM t2} } {0 {11 2 33}} -set f [open data1.txt w] -puts $f "7:8:9" -close $f -do_test auth-1.54 { - proc auth {code arg1 arg2 arg3 arg4} { - if {$code=="SQLITE_COPY"} { - set ::authargs [list $arg1 $arg2 $arg3 $arg4] - return SQLITE_DENY - } - return SQLITE_OK - } - catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'} -} {1 {not authorized}} -do_test auth-1.55 { - set ::authargs -} {t2 data1.txt main {}} -do_test auth-1.56 { - execsql {SELECT * FROM t2} -} {11 2 33} -do_test auth-1.57 { - proc auth {code arg1 arg2 arg3 arg4} { - if {$code=="SQLITE_COPY"} { - set ::authargs [list $arg1 $arg2 $arg3 $arg4] - return SQLITE_IGNORE - } - return SQLITE_OK - } - catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'} -} {0 {}} -do_test auth-1.58 { - set ::authargs -} {t2 data1.txt main {}} -do_test auth-1.59 { - execsql {SELECT * FROM t2} -} {11 2 33} -do_test auth-1.60 { - proc auth {code arg1 arg2 arg3 arg4} { - if {$code=="SQLITE_COPY"} { - set ::authargs [list $arg1 $arg2 $arg3 $arg4] - return SQLITE_OK - } - return SQLITE_OK - } - catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'} -} {0 {}} -do_test auth-1.61 { - set ::authargs -} {t2 data1.txt main {}} -do_test auth-1.62 { - execsql {SELECT * FROM t2} -} {11 2 33 7 8 9} do_test auth-1.63 { proc auth {code arg1 arg2 arg3 arg4} { diff --git a/test/copy.test b/test/copy.test deleted file mode 100644 index ef652fcba6..0000000000 --- a/test/copy.test +++ /dev/null @@ -1,265 +0,0 @@ -# 2001 September 15 -# -# The author disclaims copyright to this source code. In place of -# a legal notice, here is a blessing: -# -# May you do good and not evil. -# May you find forgiveness for yourself and forgive others. -# May you share freely, never taking more than you give. -# -#*********************************************************************** -# This file implements regression tests for SQLite library. The -# focus of this file is testing the COPY statement. -# -# $Id: copy.test,v 1.17 2004/02/17 18:26:57 dougcurrie Exp $ - -set testdir [file dirname $argv0] -source $testdir/tester.tcl - -# Create a file of data from which to copy. -# -set f [open data1.txt w] -puts $f "11\t22\t33" -puts $f "22\t33\t11" -close $f -set f [open data2.txt w] -puts $f "11\t22\t33" -puts $f "\\." -puts $f "22\t33\t11" -close $f -set f [open data3.txt w] -puts $f "11\t22\t33\t44" -puts $f "22\t33\t11" -close $f -set f [open data4.txt w] -puts $f "11 | 22 | 33" -puts $f "22 | 33 | 11" -close $f -set f [open data5.txt w] -puts $f "11|22|33" -puts $f "22|33|11" -close $f -set f [open dataX.txt w] -fconfigure $f -translation binary -puts -nonewline $f "11|22|33\r" -puts -nonewline $f "22|33|44\r\n" -puts -nonewline $f "33|44|55\n" -puts -nonewline $f "44|55|66\r" -puts -nonewline $f "55|66|77\r\n" -puts -nonewline $f "66|77|88\n" -close $f - -# Try to COPY into a non-existant table. -# -do_test copy-1.1 { - set v [catch {execsql {COPY test1 FROM 'data1.txt'}} msg] - lappend v $msg -} {1 {no such table: test1}} - -# Try to insert into sqlite_master -# -do_test copy-1.2 { - set v [catch {execsql {COPY sqlite_master FROM 'data2.txt'}} msg] - lappend v $msg -} {1 {table sqlite_master may not be modified}} - -# Do some actual inserts -# -do_test copy-1.3 { - execsql {CREATE TABLE test1(one int, two int, three int)} - execsql {COPY test1 FROM 'data1.txt'} - execsql {SELECT * FROM test1 ORDER BY one} -} {11 22 33 22 33 11} - -# Make sure input terminates at \. -# -do_test copy-1.4 { - execsql {DELETE FROM test1} - execsql {COPY test1 FROM 'data2.txt'} - execsql {SELECT * FROM test1 ORDER BY one} -} {11 22 33} - -# Test out the USING DELIMITERS clause -# -do_test copy-1.5 { - execsql {DELETE FROM test1} - execsql {COPY test1 FROM 'data4.txt' USING DELIMITERS ' | '} - execsql {SELECT * FROM test1 ORDER BY one} -} {11 22 33 22 33 11} -do_test copy-1.6 { - execsql {DELETE FROM test1} - execsql {COPY test1 FROM 'data5.txt' USING DELIMITERS '|'} - execsql {SELECT * FROM test1 ORDER BY one} -} {11 22 33 22 33 11} -do_test copy-1.7 { - execsql {DELETE FROM test1} - execsql {COPY test1 FROM 'data4.txt' USING DELIMITERS '|'} - execsql {SELECT * FROM test1 ORDER BY one} -} {{11 } { 22 } { 33} {22 } { 33 } { 11}} - -# Try copying into a table that has one or more indices. -# -do_test copy-1.8 { - execsql {DELETE FROM test1} - execsql {CREATE INDEX index1 ON test1(one)} - execsql {CREATE INDEX index2 ON test1(two)} - execsql {CREATE INDEX index3 ON test1(three)} - execsql {COPY test1 from 'data1.txt'} - execsql {SELECT * FROM test1 WHERE one=11} -} {11 22 33} -do_test copy-1.8b { - execsql {SELECT * FROM test1 WHERE one=22} -} {22 33 11} -do_test copy-1.8c { - execsql {SELECT * FROM test1 WHERE two=22} -} {11 22 33} -do_test copy-1.8d { - execsql {SELECT * FROM test1 WHERE three=11} -} {22 33 11} - - -# Try inserting really long data -# -set x {} -for {set i 0} {$i<100} {incr i} { - append x "($i)-abcdefghijklmnopqrstyvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-" -} -do_test copy-2.1 { - execsql {CREATE TABLE test2(a int, x text)} - set f [open data21.txt w] - puts $f "123\t$x" - close $f - execsql {COPY test2 FROM 'data21.txt'} - execsql {SELECT x from test2} -} $x -file delete -force data21.txt - -# Test the escape character mechanism -# -do_test copy-3.1 { - set fd [open data6.txt w] - puts $fd "hello\\\tworld\t1" - puts $fd "hello\tworld\\\t2" - close $fd - execsql { - CREATE TABLE t1(a text, b text); - COPY t1 FROM 'data6.txt'; - SELECT * FROM t1 ORDER BY a; - } -} {hello {world 2} {hello world} 1} -do_test copy-3.2 { - set fd [open data6.txt w] - puts $fd "1\thello\\\nworld" - puts $fd "2\thello world" - close $fd - execsql { - DELETE FROM t1; - COPY t1 FROM 'data6.txt'; - SELECT * FROM t1 ORDER BY a; - } -} {1 {hello -world} 2 {hello world}} -do_test copy-3.3 { - set fd [open data6.txt w] - puts $fd "1:hello\\b\\f\\n\\r\\t\\vworld" - puts $fd "2:hello world" - close $fd - execsql { - DELETE FROM t1; - COPY t1 FROM 'data6.txt' USING DELIMITERS ':'; - SELECT * FROM t1 ORDER BY a; - } -} [list 1 "hello\b\f\n\r\t\vworld" 2 "hello world"] - -# Test the embedded NULL logic. -# -do_test copy-4.1 { - set fd [open data6.txt w] - puts $fd "1\t\\N" - puts $fd "\\N\thello world" - close $fd - execsql { - DELETE FROM t1; - COPY t1 FROM 'data6.txt'; - SELECT * FROM t1 WHERE a IS NULL; - } -} {{} {hello world}} -do_test copy-4.2 { - execsql { - SELECT * FROM t1 WHERE b IS NULL; - } -} {1 {}} - -# Test the conflict resolution logic for COPY -# -do_test copy-5.1 { - execsql { - DROP TABLE t1; - CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE, c); - COPY t1 FROM 'data5.txt' USING DELIMITERS '|'; - SELECT * FROM t1; - } -} {11 22 33 22 33 11} -do_test copy-5.2 { - set fd [open data6.txt w] - puts $fd "33|22|44" - close $fd - catchsql { - COPY t1 FROM 'data6.txt' USING DELIMITERS '|'; - SELECT * FROM t1; - } -} {1 {column b is not unique}} -do_test copy-5.3 { - set fd [open data6.txt w] - puts $fd "33|22|44" - close $fd - catchsql { - COPY OR IGNORE t1 FROM 'data6.txt' USING DELIMITERS '|'; - SELECT * FROM t1; - } -} {0 {11 22 33 22 33 11}} -do_test copy-5.4 { - set fd [open data6.txt w] - puts $fd "33|22|44" - close $fd - catchsql { - COPY OR REPLACE t1 FROM 'data6.txt' USING DELIMITERS '|'; - SELECT * FROM t1; - } -} {0 {22 33 11 33 22 44}} - -do_test copy-5.5 { - execsql { - DELETE FROM t1; - PRAGMA count_changes=on; - COPY t1 FROM 'data5.txt' USING DELIMITERS '|'; - } -} {2} -do_test copy-5.6 { - execsql { - COPY OR REPLACE t1 FROM 'data5.txt' USING DELIMITERS '|'; - } -} {2} -do_test copy-5.7 { - execsql { - COPY OR IGNORE t1 FROM 'data5.txt' USING DELIMITERS '|'; - } -} {0} - -do_test copy-6.1 { - execsql { - PRAGMA count_changes=off; - CREATE TABLE t2(a,b,c); - COPY t2 FROM 'dataX.txt' USING DELIMITERS '|'; - SELECT * FROM t2; - } -} {11 22 33 22 33 44 33 44 55 44 55 66 55 66 77 66 77 88} - -integrity_check copy-7.1 - -# Cleanup -# -#file delete -force data1.txt data2.txt data3.txt data4.txt data5.txt \ - data6.txt dataX.txt - -finish_test diff --git a/test/delete.test b/test/delete.test index 4b7277e826..142e330731 100644 --- a/test/delete.test +++ b/test/delete.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this file is testing the DELETE FROM statement. # -# $Id: delete.test,v 1.13 2003/06/15 23:42:25 drh Exp $ +# $Id: delete.test,v 1.14 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -152,16 +152,15 @@ integrity_check delete-5.8 # mechanism in the vdbe. # do_test delete-6.1 { - set fd [open data1.txt w] + execsql {BEGIN; DELETE FROM table1} for {set i 1} {$i<=3000} {incr i} { - puts $fd "[expr {$i}]\t[expr {$i*$i}]" + execsql "INSERT INTO table1 VALUES($i,[expr {$i*$i}])" } - close $fd - execsql {DELETE FROM table1} - execsql {COPY table1 FROM 'data1.txt'} execsql {DELETE FROM table2} - execsql {COPY table2 FROM 'data1.txt'} - file delete data1.txt + for {set i 1} {$i<=3000} {incr i} { + execsql "INSERT INTO table2 VALUES($i,[expr {$i*$i}])" + } + execsql {COMMIT} execsql {SELECT count(*) FROM table1} } {3000} do_test delete-6.2 { diff --git a/test/enc2.test b/test/enc2.test index 183f91a571..9e56bdc474 100644 --- a/test/enc2.test +++ b/test/enc2.test @@ -13,7 +13,7 @@ # various suported unicode encodings (UTF-8, UTF-16, UTF-16le and # UTF-16be). # -# $Id: enc2.test,v 1.3 2004/05/27 01:53:56 drh Exp $ +# $Id: enc2.test,v 1.4 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -59,14 +59,13 @@ do_test $t.2 { execsql {SELECT * FROM t1} } {one I 1 two II 2} -# Insert some data using the COPY command. +# Insert some data do_test $t.3 { - set f [open data.txt w] - puts $f "three\tIII\t3" - puts $f "four\tIV\t4" - puts $f "five\tV\t5" - close $f - execsql {COPY t1 FROM 'data.txt'} + execsql { + INSERT INTO t1 VALUES('three','III',3); + INSERT INTO t1 VALUES('four','IV',4); + INSERT INTO t1 VALUES('five','V',5); + } execsql {SELECT * FROM t1} } {one I 1 two II 2 three III 3 four IV 4 five V 5} diff --git a/test/format3.test b/test/format3.test deleted file mode 100644 index 9ad86802f3..0000000000 --- a/test/format3.test +++ /dev/null @@ -1,738 +0,0 @@ -# 2001 September 15 -# -# The author disclaims copyright to this source code. In place of -# a legal notice, here is a blessing: -# -# May you do good and not evil. -# May you find forgiveness for yourself and forgive others. -# May you share freely, never taking more than you give. -# -#*********************************************************************** -# This file implements regression tests for SQLite library. The -# focus of this file is testing the the library is able to correctly -# handle file-format 3 (version 2.6.x) databases. -# -# $Id: format3.test,v 1.4 2003/12/23 02:17:35 drh Exp $ - -set testdir [file dirname $argv0] -source $testdir/tester.tcl - -# Create a bunch of data to sort against -# -do_test format3-1.0 { - set fd [open data.txt w] - puts $fd "1\tone\t0\tI\t3.141592653" - puts $fd "2\ttwo\t1\tII\t2.15" - puts $fd "3\tthree\t1\tIII\t4221.0" - puts $fd "4\tfour\t2\tIV\t-0.0013442" - puts $fd "5\tfive\t2\tV\t-11" - puts $fd "6\tsix\t2\tVI\t0.123" - puts $fd "7\tseven\t2\tVII\t123.0" - puts $fd "8\teight\t3\tVIII\t-1.6" - close $fd - execsql { - CREATE TABLE t1( - n int, - v varchar(10), - log int, - roman varchar(10), - flt real - ); - COPY t1 FROM 'data.txt' - } - file delete data.txt - db close - set ::bt [btree_open test.db] - btree_begin_transaction $::bt - set m [btree_get_meta $::bt] - set m [lreplace $m 2 2 3] - eval btree_update_meta $::bt $m - btree_commit $::bt - btree_close $::bt - sqlite db test.db - execsql {SELECT count(*) FROM t1} -} {8} - -do_test format3-1.1 { - execsql {SELECT n FROM t1 ORDER BY n} -} {1 2 3 4 5 6 7 8} -do_test format3-1.1.1 { - execsql {SELECT n FROM t1 ORDER BY n ASC} -} {1 2 3 4 5 6 7 8} -do_test format3-1.1.1 { - execsql {SELECT ALL n FROM t1 ORDER BY n ASC} -} {1 2 3 4 5 6 7 8} -do_test format3-1.2 { - execsql {SELECT n FROM t1 ORDER BY n DESC} -} {8 7 6 5 4 3 2 1} -do_test format3-1.3a { - execsql {SELECT v FROM t1 ORDER BY v} -} {eight five four one seven six three two} -do_test format3-1.3b { - execsql {SELECT n FROM t1 ORDER BY v} -} {8 5 4 1 7 6 3 2} -do_test format3-1.4 { - execsql {SELECT n FROM t1 ORDER BY v DESC} -} {2 3 6 7 1 4 5 8} -do_test format3-1.5 { - execsql {SELECT flt FROM t1 ORDER BY flt} -} {-11 -1.6 -0.0013442 0.123 2.15 3.141592653 123.0 4221.0} -do_test format3-1.6 { - execsql {SELECT flt FROM t1 ORDER BY flt DESC} -} {4221.0 123.0 3.141592653 2.15 0.123 -0.0013442 -1.6 -11} -do_test format3-1.7 { - execsql {SELECT roman FROM t1 ORDER BY roman} -} {I II III IV V VI VII VIII} -do_test format3-1.8 { - execsql {SELECT n FROM t1 ORDER BY log, flt} -} {1 2 3 5 4 6 7 8} -do_test format3-1.8.1 { - execsql {SELECT n FROM t1 ORDER BY log asc, flt} -} {1 2 3 5 4 6 7 8} -do_test format3-1.8.2 { - execsql {SELECT n FROM t1 ORDER BY log, flt ASC} -} {1 2 3 5 4 6 7 8} -do_test format3-1.8.3 { - execsql {SELECT n FROM t1 ORDER BY log ASC, flt asc} -} {1 2 3 5 4 6 7 8} -do_test format3-1.9 { - execsql {SELECT n FROM t1 ORDER BY log, flt DESC} -} {1 3 2 7 6 4 5 8} -do_test format3-1.9.1 { - execsql {SELECT n FROM t1 ORDER BY log ASC, flt DESC} -} {1 3 2 7 6 4 5 8} -do_test format3-1.10 { - execsql {SELECT n FROM t1 ORDER BY log DESC, flt} -} {8 5 4 6 7 2 3 1} -do_test format3-1.11 { - execsql {SELECT n FROM t1 ORDER BY log DESC, flt DESC} -} {8 7 6 4 5 3 2 1} - -# These tests are designed to reach some hard-to-reach places -# inside the string comparison routines. -# -# (Later) The sorting behavior changed in 2.7.0. But we will -# keep these tests. You can never have too many test cases! -# -do_test format3-2.1.1 { - execsql { - UPDATE t1 SET v='x' || -flt; - UPDATE t1 SET v='x-2b' where v=='x-0.123'; - SELECT v FROM t1 ORDER BY v; - } -} {x-123 x-2.15 x-2b x-3.141592653 x-4221 x0.0013442 x1.6 x11} -do_test format3-2.1.2 { - execsql { - SELECT v FROM t1 ORDER BY substr(v,2,999); - } -} {x-4221 x-123 x-3.141592653 x-2.15 x0.0013442 x1.6 x11 x-2b} -do_test format3-2.1.3 { - execsql { - SELECT v FROM t1 ORDER BY substr(v,2,999)+0.0; - } -} {x-4221 x-123 x-3.141592653 x-2.15 x-2b x0.0013442 x1.6 x11} -do_test format3-2.1.4 { - execsql { - SELECT v FROM t1 ORDER BY substr(v,2,999) DESC; - } -} {x-2b x11 x1.6 x0.0013442 x-2.15 x-3.141592653 x-123 x-4221} -do_test format3-2.1.5 { - execsql { - SELECT v FROM t1 ORDER BY substr(v,2,999)+0.0 DESC; - } -} {x11 x1.6 x0.0013442 x-2b x-2.15 x-3.141592653 x-123 x-4221} - -# This is a bug fix for 2.2.4. -# Strings are normally mapped to upper-case for a caseless comparison. -# But this can cause problems for characters in between 'Z' and 'a'. -# -do_test format3-3.1 { - execsql { - CREATE TABLE t2(a,b); - INSERT INTO t2 VALUES('AGLIENTU',1); - INSERT INTO t2 VALUES('AGLIE`',2); - INSERT INTO t2 VALUES('AGNA',3); - SELECT a, b FROM t2 ORDER BY a; - } -} {AGLIENTU 1 AGLIE` 2 AGNA 3} -do_test format3-3.2 { - execsql { - SELECT a, b FROM t2 ORDER BY a DESC; - } -} {AGNA 3 AGLIE` 2 AGLIENTU 1} -do_test format3-3.3 { - execsql { - DELETE FROM t2; - INSERT INTO t2 VALUES('aglientu',1); - INSERT INTO t2 VALUES('aglie`',2); - INSERT INTO t2 VALUES('agna',3); - SELECT a, b FROM t2 ORDER BY a; - } -} {aglie` 2 aglientu 1 agna 3} -do_test format3-3.4 { - execsql { - SELECT a, b FROM t2 ORDER BY a DESC; - } -} {agna 3 aglientu 1 aglie` 2} - -# Version 2.7.0 testing. -# -do_test format3-4.1 { - execsql { - INSERT INTO t1 VALUES(9,'x2.7',3,'IX',4.0e5); - INSERT INTO t1 VALUES(10,'x5.0e10',3,'X',-4.0e5); - INSERT INTO t1 VALUES(11,'x-4.0e9',3,'XI',4.1e4); - INSERT INTO t1 VALUES(12,'x01234567890123456789',3,'XII',-4.2e3); - SELECT n FROM t1 ORDER BY n; - } -} {1 2 3 4 5 6 7 8 9 10 11 12} -do_test format3-4.2 { - execsql { - SELECT n||'' FROM t1 ORDER BY 1; - } -} {1 2 3 4 5 6 7 8 9 10 11 12} -do_test format3-4.3 { - execsql { - SELECT n+0 FROM t1 ORDER BY 1; - } -} {1 2 3 4 5 6 7 8 9 10 11 12} -do_test format3-4.4 { - execsql { - SELECT n||'' FROM t1 ORDER BY 1 DESC; - } -} {12 11 10 9 8 7 6 5 4 3 2 1} -do_test format3-4.5 { - execsql { - SELECT n+0 FROM t1 ORDER BY 1 DESC; - } -} {12 11 10 9 8 7 6 5 4 3 2 1} -do_test format3-4.6 { - execsql { - SELECT v FROM t1 ORDER BY 1; - } -} {x-123 x-2.15 x-2b x-3.141592653 x-4.0e9 x-4221 x0.0013442 x01234567890123456789 x1.6 x11 x2.7 x5.0e10} -do_test format3-4.7 { - execsql { - SELECT v FROM t1 ORDER BY 1 DESC; - } -} {x5.0e10 x2.7 x11 x1.6 x01234567890123456789 x0.0013442 x-4221 x-4.0e9 x-3.141592653 x-2b x-2.15 x-123} -do_test format3-4.8 { - execsql { - SELECT substr(v,2,99) FROM t1 ORDER BY 1; - } -} {-4.0e9 -4221 -123 -3.141592653 -2.15 0.0013442 1.6 2.7 11 5.0e10 01234567890123456789 -2b} - -# Build some new test data, this time with indices. -# -do_test format3-5.0 { - execsql { - DROP TABLE t1; - CREATE TABLE t1(w int, x text, y blob); - DROP TABLE t2; - CREATE TABLE t2(p varchar(1), q clob, r real, s numeric(8)); - } - for {set i 1} {$i<=100} {incr i} { - set w $i - set x [expr {int(log($i)/log(2))}] - set y [expr {$i*$i + 2*$i + 1}] - execsql "INSERT INTO t1 VALUES($w,$x,$y)" - } - execsql { - INSERT INTO t2 SELECT 101-w, x, (SELECT max(y) FROM t1)+1-y, y FROM t1; - CREATE INDEX i1w ON t1(w); - CREATE INDEX i1xy ON t1(x,y); - CREATE INDEX i2p ON t2(p); - CREATE INDEX i2r ON t2(r); - CREATE INDEX i2qs ON t2(q, s); - } -} {} - -# Do an SQL statement. Append the search count to the end of the result. -# -proc count sql { - set ::sqlite_search_count 0 - return [concat [execsql $sql] $::sqlite_search_count] -} - -# Verify that queries use an index. We are using the special variable -# "sqlite_search_count" which tallys the number of executions of MoveTo -# and Next operators in the VDBE. By verifing that the search count is -# small we can be assured that indices are being used properly. -# -do_test format3-5.1 { - db close - sqlite db test.db - count {SELECT x, y FROM t1 WHERE w=10} -} {3 121 3} -do_test format3-5.2 { - count {SELECT x, y FROM t1 WHERE w=11} -} {3 144 3} -do_test format3-5.3 { - count {SELECT x, y FROM t1 WHERE 11=w} -} {3 144 3} -do_test format3-5.4 { - count {SELECT x, y FROM t1 WHERE 11=w AND x>2} -} {3 144 3} -do_test format3-5.5 { - count {SELECT x, y FROM t1 WHERE y<200 AND w=11 AND x>2} -} {3 144 3} -do_test format3-5.6 { - count {SELECT x, y FROM t1 WHERE y<200 AND x>2 AND w=11} -} {3 144 3} -do_test format3-5.7 { - count {SELECT x, y FROM t1 WHERE w=11 AND y<200 AND x>2} -} {3 144 3} -do_test format3-5.8 { - count {SELECT x, y FROM t1 WHERE w>10 AND y=144 AND x=3} -} {3 144 3} -do_test format3-5.9 { - count {SELECT x, y FROM t1 WHERE y=144 AND w>10 AND x=3} -} {3 144 3} -do_test format3-5.10 { - count {SELECT x, y FROM t1 WHERE x=3 AND w>=10 AND y=121} -} {3 121 3} -do_test format3-5.11 { - count {SELECT x, y FROM t1 WHERE x=3 AND y=100 AND w<10} -} {3 100 3} - -# New for SQLite version 2.1: Verify that that inequality constraints -# are used correctly. -# -do_test format3-5.12 { - count {SELECT w FROM t1 WHERE x=3 AND y<100} -} {8 3} -do_test format3-5.13 { - count {SELECT w FROM t1 WHERE x=3 AND 100>y} -} {8 3} -do_test format3-5.14 { - count {SELECT w FROM t1 WHERE 3=x AND y<100} -} {8 3} -do_test format3-5.15 { - count {SELECT w FROM t1 WHERE 3=x AND 100>y} -} {8 3} -do_test format3-5.16 { - count {SELECT w FROM t1 WHERE x=3 AND y<=100} -} {8 9 5} -do_test format3-5.17 { - count {SELECT w FROM t1 WHERE x=3 AND 100>=y} -} {8 9 5} -do_test format3-5.18 { - count {SELECT w FROM t1 WHERE x=3 AND y>225} -} {15 3} -do_test format3-5.19 { - count {SELECT w FROM t1 WHERE x=3 AND 225=225} -} {14 15 5} -do_test format3-5.21 { - count {SELECT w FROM t1 WHERE x=3 AND 225<=y} -} {14 15 5} -do_test format3-5.22 { - count {SELECT w FROM t1 WHERE x=3 AND y>121 AND y<196} -} {11 12 5} -do_test format3-5.23 { - count {SELECT w FROM t1 WHERE x=3 AND y>=121 AND y<=196} -} {10 11 12 13 9} -do_test format3-5.24 { - count {SELECT w FROM t1 WHERE x=3 AND 121y} -} {11 12 5} -do_test format3-5.25 { - count {SELECT w FROM t1 WHERE x=3 AND 121<=y AND 196>=y} -} {10 11 12 13 9} - -# Need to work on optimizing the BETWEEN operator. -# -# do_test format3-5.26 { -# count {SELECT w FROM t1 WHERE x=3 AND y BETWEEN 121 AND 196} -# } {10 11 12 13 9} - -do_test format3-5.27 { - count {SELECT w FROM t1 WHERE x=3 AND y+1==122} -} {10 17} -do_test format3-5.28 { - count {SELECT w FROM t1 WHERE x+1=4 AND y+1==122} -} {10 99} -do_test format3-5.29 { - count {SELECT w FROM t1 WHERE y==121} -} {10 99} - - -do_test format3-5.30 { - count {SELECT w FROM t1 WHERE w>97} -} {98 99 100 6} -do_test format3-5.31 { - count {SELECT w FROM t1 WHERE w>=97} -} {97 98 99 100 8} -do_test format3-5.33 { - count {SELECT w FROM t1 WHERE w==97} -} {97 3} -do_test format3-5.34 { - count {SELECT w FROM t1 WHERE w+1==98} -} {97 99} -do_test format3-5.35 { - count {SELECT w FROM t1 WHERE w<3} -} {1 2 4} -do_test format3-5.36 { - count {SELECT w FROM t1 WHERE w<=3} -} {1 2 3 6} -do_test format3-5.37 { - count {SELECT w FROM t1 WHERE w+1<=4 ORDER BY w} -} {1 2 3 199} - - -# Do the same kind of thing except use a join as the data source. -# -do_test format3-6.1 { - db close - sqlite db test.db - count { - SELECT w, p FROM t2, t1 - WHERE x=q AND y=s AND r=8977 - } -} {34 67 6} -do_test format3-6.2 { - count { - SELECT w, p FROM t2, t1 - WHERE x=q AND s=y AND r=8977 - } -} {34 67 6} -do_test format3-6.3 { - count { - SELECT w, p FROM t2, t1 - WHERE x=q AND s=y AND r=8977 AND w>10 - } -} {34 67 6} -do_test format3-6.4 { - count { - SELECT w, p FROM t2, t1 - WHERE p<80 AND x=q AND s=y AND r=8977 AND w>10 - } -} {34 67 6} -do_test format3-6.5 { - count { - SELECT w, p FROM t2, t1 - WHERE p<80 AND x=q AND 8977=r AND s=y AND w>10 - } -} {34 67 6} -do_test format3-6.6 { - count { - SELECT w, p FROM t2, t1 - WHERE x=q AND p=77 AND s=y AND w>5 - } -} {24 77 6} -do_test format3-6.7 { - count { - SELECT w, p FROM t1, t2 - WHERE x=q AND p>77 AND s=y AND w=5 - } -} {5 96 6} - -# Lets do a 3-way join. -# -do_test format3-7.1 { - count { - SELECT A.w, B.p, C.w FROM t1 as A, t2 as B, t1 as C - WHERE C.w=101-B.p AND B.r=10202-A.y AND A.w=11 - } -} {11 90 11 9} -do_test format3-7.2 { - count { - SELECT A.w, B.p, C.w FROM t1 as A, t2 as B, t1 as C - WHERE C.w=101-B.p AND B.r=10202-A.y AND A.w=12 - } -} {12 89 12 9} -do_test format3-7.3 { - count { - SELECT A.w, B.p, C.w FROM t1 as A, t2 as B, t1 as C - WHERE A.w=15 AND B.p=C.w AND B.r=10202-A.y - } -} {15 86 86 9} - -# Test to see that the special case of a constant WHERE clause is -# handled. -# -do_test format3-8.1 { - count { - SELECT * FROM t1 WHERE 0 - } -} {0} -do_test format3-8.2 { - count { - SELECT * FROM t1 WHERE 1 LIMIT 1 - } -} {1 0 4 1} -do_test format3-8.3 { - execsql { - SELECT 99 WHERE 0 - } -} {} -do_test format3-8.4 { - execsql { - SELECT 99 WHERE 1 - } -} {99} - -# Verify that IN operators in a WHERE clause are handled correctly. -# -do_test format3-9.1 { - count { - SELECT * FROM t1 WHERE rowid IN (1,2,3,1234) order by 1; - } -} {1 0 4 2 1 9 3 1 16 0} -do_test format3-9.2 { - count { - SELECT * FROM t1 WHERE rowid+0 IN (1,2,3,1234) order by 1; - } -} {1 0 4 2 1 9 3 1 16 199} -do_test format3-9.3 { - count { - SELECT * FROM t1 WHERE w IN (-1,1,2,3) order by 1; - } -} {1 0 4 2 1 9 3 1 16 10} -do_test format3-9.4 { - count { - SELECT * FROM t1 WHERE w+0 IN (-1,1,2,3) order by 1; - } -} {1 0 4 2 1 9 3 1 16 199} -do_test format3-9.5 { - count { - SELECT * FROM t1 WHERE rowid IN - (select rowid from t1 where rowid IN (-1,2,4)) - ORDER BY 1; - } -} {2 1 9 4 2 25 1} -do_test format3-9.6 { - count { - SELECT * FROM t1 WHERE rowid+0 IN - (select rowid from t1 where rowid IN (-1,2,4)) - ORDER BY 1; - } -} {2 1 9 4 2 25 199} -do_test format3-9.7 { - count { - SELECT * FROM t1 WHERE w IN - (select rowid from t1 where rowid IN (-1,2,4)) - ORDER BY 1; - } -} {2 1 9 4 2 25 7} -do_test format3-9.8 { - count { - SELECT * FROM t1 WHERE w+0 IN - (select rowid from t1 where rowid IN (-1,2,4)) - ORDER BY 1; - } -} {2 1 9 4 2 25 199} -do_test format3-9.9 { - count { - SELECT * FROM t1 WHERE x IN (1,7) ORDER BY 1; - } -} {2 1 9 3 1 16 6} -do_test format3-9.10 { - count { - SELECT * FROM t1 WHERE x+0 IN (1,7) ORDER BY 1; - } -} {2 1 9 3 1 16 199} -do_test format3-9.11 { - count { - SELECT * FROM t1 WHERE y IN (6400,8100) ORDER BY 1; - } -} {79 6 6400 89 6 8100 199} -do_test format3-9.12 { - count { - SELECT * FROM t1 WHERE x=6 AND y IN (6400,8100) ORDER BY 1; - } -} {79 6 6400 89 6 8100 74} -do_test format3-9.13 { - count { - SELECT * FROM t1 WHERE x IN (1,7) AND y NOT IN (6400,8100) ORDER BY 1; - } -} {2 1 9 3 1 16 6} -do_test format3-9.14 { - count { - SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,10) ORDER BY 1; - } -} {2 1 9 6} - -# This procedure executes the SQL. Then it checks the generated program -# for the SQL and appends a "nosort" to the result if the program contains the -# SortCallback opcode. If the program does not contain the SortCallback -# opcode it appends "sort" -# -proc cksort {sql} { - set data [execsql $sql] - set prog [execsql "EXPLAIN $sql"] - if {[regexp SortCallback $prog]} {set x sort} {set x nosort} - lappend data $x - return $data -} -# Check out the logic that attempts to implement the ORDER BY clause -# using an index rather than by sorting. -# -do_test format3-10.1 { - execsql { - CREATE TABLE t3(a,b,c); - CREATE INDEX t3a ON t3(a); - CREATE INDEX t3bc ON t3(b,c); - CREATE INDEX t3acb ON t3(a,c,b); - INSERT INTO t3 SELECT w, 101-w, y FROM t1; - SELECT count(*), sum(a), sum(b), sum(c) FROM t3; - } -} {100 5050 5050 348550} -do_test format3-10.2 { - cksort { - SELECT * FROM t3 ORDER BY a LIMIT 3 - } -} {1 100 4 2 99 9 3 98 16 nosort} -do_test format3-10.3 { - cksort { - SELECT * FROM t3 ORDER BY a+1 LIMIT 3 - } -} {1 100 4 2 99 9 3 98 16 sort} -do_test format3-10.4 { - cksort { - SELECT * FROM t3 WHERE a<10 ORDER BY a LIMIT 3 - } -} {1 100 4 2 99 9 3 98 16 nosort} -do_test format3-10.5 { - cksort { - SELECT * FROM t3 WHERE a>0 AND a<10 ORDER BY a LIMIT 3 - } -} {1 100 4 2 99 9 3 98 16 nosort} -do_test format3-10.6 { - cksort { - SELECT * FROM t3 WHERE a>0 ORDER BY a LIMIT 3 - } -} {1 100 4 2 99 9 3 98 16 nosort} -do_test format3-10.7 { - cksort { - SELECT * FROM t3 WHERE b>0 ORDER BY a LIMIT 3 - } -} {1 100 4 2 99 9 3 98 16 sort} -do_test format3-10.8 { - cksort { - SELECT * FROM t3 WHERE a IN (3,5,7,1,9,4,2) ORDER BY a LIMIT 3 - } -} {1 100 4 2 99 9 3 98 16 sort} -do_test format3-10.9 { - cksort { - SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a LIMIT 3 - } -} {1 100 4 nosort} -do_test format3-10.10 { - cksort { - SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a LIMIT 3 - } -} {1 100 4 nosort} -do_test format3-10.11 { - cksort { - SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a,c LIMIT 3 - } -} {1 100 4 nosort} -do_test format3-10.12 { - cksort { - SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a,c,b LIMIT 3 - } -} {1 100 4 nosort} -do_test format3-10.13 { - cksort { - SELECT * FROM t3 WHERE a>0 ORDER BY a DESC LIMIT 3 - } -} {100 1 10201 99 2 10000 98 3 9801 nosort} -do_test format3-10.13.1 { - cksort { - SELECT * FROM t3 WHERE a>0 ORDER BY a+1 DESC LIMIT 3 - } -} {100 1 10201 99 2 10000 98 3 9801 sort} -do_test format3-10.14 { - cksort { - SELECT * FROM t3 ORDER BY b LIMIT 3 - } -} {100 1 10201 99 2 10000 98 3 9801 nosort} -do_test format3-10.15 { - cksort { - SELECT t3.a, t1.x FROM t3, t1 WHERE t3.a=t1.w ORDER BY t3.a LIMIT 3 - } -} {1 0 2 1 3 1 nosort} -do_test format3-10.16 { - cksort { - SELECT t3.a, t1.x FROM t3, t1 WHERE t3.a=t1.w ORDER BY t1.x, t3.a LIMIT 3 - } -} {1 0 2 1 3 1 sort} -do_test format3-10.17 { - cksort { - SELECT y FROM t1 ORDER BY w COLLATE text LIMIT 3; - } -} {4 121 10201 sort} -do_test format3-10.18 { - cksort { - SELECT y FROM t1 ORDER BY w COLLATE numeric LIMIT 3; - } -} {4 9 16 sort} -do_test format3-10.19 { - cksort { - SELECT y FROM t1 ORDER BY w LIMIT 3; - } -} {4 9 16 nosort} - -# Check that all comparisons are numeric. Similar tests in misc1.test -# check the same comparisons on a format4+ database and find that some -# are numeric and some are text. -# -do_test format3-11.1 { - execsql {SELECT '0'=='0.0'} -} {1} -do_test format3-11.2 { - execsql {SELECT '0'==0.0} -} {1} -do_test format3-11.3 { - execsql {SELECT '123456789012345678901'=='123456789012345678900'} -} {1} -do_test format3-11.4 { - execsql { - CREATE TABLE t6(a INT UNIQUE, b TEXT UNIQUE); - INSERT INTO t6 VALUES('0','0.0'); - SELECT * FROM t6; - } -} {0 0.0} -do_test format3-11.5 { - execsql { - INSERT OR IGNORE INTO t6 VALUES(0.0,'x'); - SELECT * FROM t6; - } -} {0 0.0} -do_test format3-11.6 { - execsql { - INSERT OR IGNORE INTO t6 VALUES('y',0); - SELECT * FROM t6; - } -} {0 0.0} -do_test format3-11.7 { - execsql { - CREATE TABLE t7(x INTEGER, y TEXT, z); - INSERT INTO t7 VALUES(0,0,1); - INSERT INTO t7 VALUES(0.0,0,2); - INSERT INTO t7 VALUES(0,0.0,3); - INSERT INTO t7 VALUES(0.0,0.0,4); - SELECT DISTINCT x, y FROM t7 ORDER BY z; - } -} {0 0} - -# Make sure attempts to attach a format 3 database fail. -# -do_test format3-12.1 { - file delete -force test2.db - sqlite db2 test2.db - catchsql { - CREATE TABLE t8(x,y); - ATTACH DATABASE 'test.db' AS format3; - } db2; -} {1 {incompatible file format in auxiliary database: format3}} -do_test format3-12.2 { - catchsql { - ATTACH DATABASE 'test2.db' AS test2; - } -} {1 {cannot attach auxiliary databases to an older format master database}} -db2 close - -finish_test diff --git a/test/in.test b/test/in.test index 9fb8adf0e5..c717a90b4e 100644 --- a/test/in.test +++ b/test/in.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this file is testing the IN and BETWEEN operator. # -# $Id: in.test,v 1.11 2004/01/15 03:30:25 drh Exp $ +# $Id: in.test,v 1.12 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -19,17 +19,17 @@ source $testdir/tester.tcl # Generate the test data we will need for the first squences of tests. # do_test in-1.0 { - set fd [open data1.txt w] - for {set i 1} {$i<=10} {incr i} { - puts $fd "$i\t[expr {int(pow(2,$i))}]" - } - close $fd execsql { + BEGIN; CREATE TABLE t1(a int, b int); - COPY t1 FROM 'data1.txt'; } - file delete -force data1.txt - execsql {SELECT count(*) FROM t1} + for {set i 1} {$i<=10} {incr i} { + execsql "INSERT INTO t1 VALUES($i,[expr {int(pow(2,$i))}])" + } + execsql { + COMMIT; + SELECT count(*) FROM t1; + } } {10} # Do basic testing of BETWEEN. diff --git a/test/intpkey.test b/test/intpkey.test index 8745848faf..c159fb493d 100644 --- a/test/intpkey.test +++ b/test/intpkey.test @@ -13,7 +13,7 @@ # This file implements tests for the special processing associated # with INTEGER PRIMARY KEY columns. # -# $Id: intpkey.test,v 1.14 2003/06/15 23:42:25 drh Exp $ +# $Id: intpkey.test,v 1.15 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -380,14 +380,16 @@ do_test intpkey=5.2 { # Test the ability of the COPY command to put data into a # table that contains an integer primary key. # +# COPY command has been removed. But we retain these tests so +# that the tables will contain the right data for tests that follow. +# do_test intpkey-6.1 { - set f [open ./data1.txt w] - puts $f "20\tb-20\tc-20" - puts $f "21\tb-21\tc-21" - puts $f "22\tb-22\tc-22" - close $f execsql { - COPY t1 FROM 'data1.txt'; + BEGIN; + INSERT INTO t1 VALUES(20,'b-20','c-20'); + INSERT INTO t1 VALUES(21,'b-21','c-21'); + INSERT INTO t1 VALUES(22,'b-22','c-22'); + COMMIT; SELECT * FROM t1 WHERE a>=20; } } {20 b-20 c-20 21 b-21 c-21 22 b-22 c-22} diff --git a/test/limit.test b/test/limit.test index 157bd759f8..6c744c504c 100644 --- a/test/limit.test +++ b/test/limit.test @@ -12,24 +12,24 @@ # focus of this file is testing the LIMIT ... OFFSET ... clause # of SELECT statements. # -# $Id: limit.test,v 1.12 2004/05/14 21:12:24 drh Exp $ +# $Id: limit.test,v 1.13 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Build some test data # -set fd [open data1.txt w] -for {set i 1} {$i<=32} {incr i} { - for {set j 0} {pow(2,$j)<$i} {incr j} {} - puts $fd "[expr {32-$i}]\t[expr {10-$j}]" -} -close $fd execsql { CREATE TABLE t1(x int, y int); - COPY t1 FROM 'data1.txt' + BEGIN; +} +for {set i 1} {$i<=32} {incr i} { + for {set j 0} {pow(2,$j)<$i} {incr j} {} + execsql "INSERT INTO t1 VALUES([expr {32-$i}],[expr {10-$j}])" +} +execsql { + COMMIT; } -file delete data1.txt do_test limit-1.0 { execsql {SELECT count(*) FROM t1} diff --git a/test/malloc.test b/test/malloc.test index 0bc0cb7073..58ea10a06f 100644 --- a/test/malloc.test +++ b/test/malloc.test @@ -14,7 +14,7 @@ # special feature is used to see what happens in the library if a malloc # were to really fail due to an out-of-memory situation. # -# $Id: malloc.test,v 1.6 2004/02/14 01:39:50 drh Exp $ +# $Id: malloc.test,v 1.7 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -67,7 +67,7 @@ for {set go 1; set i 1} {$go} {incr i} { set fd [open ./data.tmp w] for {set i 1} {$i<=20} {incr i} { - puts $fd "$i\t[expr {$i*$i}]\t[expr {100-$i}] abcdefghijklmnopqrstuvwxyz" + puts $fd "$i\t[expr {$i*$i}]\t[expr {100-$i}] abcdefghijklmnopqrstuvwxyz" } close $fd @@ -85,7 +85,12 @@ for {set go 1; set i 1} {$go} {incr i} { set v [catch {execsql { CREATE TABLE t1(a int, b int, c int); CREATE INDEX i1 ON t1(a,b); - COPY t1 FROM 'data.tmp'; + INSERT INTO t1 VALUES(1,1,'99 abcdefghijklmnopqrstuvwxyz'); + INSERT INTO t1 VALUES(2,4,'98 abcdefghijklmnopqrstuvwxyz'); + INSERT INTO t1 VALUES(3,9,'97 abcdefghijklmnopqrstuvwxyz'); + INSERT INTO t1 VALUES(4,16,'96 abcdefghijklmnopqrstuvwxyz'); + INSERT INTO t1 VALUES(5,25,'95 abcdefghijklmnopqrstuvwxyz'); + INSERT INTO t1 VALUES(6,36,'94 abcdefghijklmnopqrstuvwxyz'); SELECT 'stuff', count(*) as 'other stuff', max(a+10) FROM t1; UPDATE t1 SET b=b||b||b||b; UPDATE t1 SET b=a WHERE a in (10,12,22); @@ -110,12 +115,6 @@ for {set go 1; set i 1} {$go} {incr i} { } {1 1} } -set fd [open ./data.tmp w] -for {set i 1} {$i<=10} {incr i} { - puts $fd "$i\t[expr {$i*$i}]\t[expr {100-$i}]" -} -close $fd - for {set go 1; set i 1} {$go} {incr i} { do_test malloc-3.$i { sqlite_malloc_fail 0 @@ -131,7 +130,12 @@ for {set go 1; set i 1} {$go} {incr i} { BEGIN TRANSACTION; CREATE TABLE t1(a int, b int, c int); CREATE INDEX i1 ON t1(a,b); - COPY t1 FROM 'data.tmp'; + INSERT INTO t1 VALUES(1,1,99); + INSERT INTO t1 VALUES(2,4,98); + INSERT INTO t1 VALUES(3,9,97); + INSERT INTO t1 VALUES(4,16,96); + INSERT INTO t1 VALUES(5,25,95); + INSERT INTO t1 VALUES(6,36,94); INSERT INTO t1(c,b,a) VALUES(20,10,5); DELETE FROM t1 WHERE a>=10; DROP INDEX i1; @@ -166,7 +170,12 @@ for {set go 1; set i 1} {$go} {incr i} { BEGIN TRANSACTION; CREATE TABLE t1(a int, b int, c int); CREATE INDEX i1 ON t1(a,b); - COPY t1 FROM 'data.tmp'; + INSERT INTO t1 VALUES(1,1,99); + INSERT INTO t1 VALUES(2,4,98); + INSERT INTO t1 VALUES(3,9,97); + INSERT INTO t1 VALUES(4,16,96); + INSERT INTO t1 VALUES(5,25,95); + INSERT INTO t1 VALUES(6,36,94); UPDATE t1 SET b=a WHERE a in (10,12,22); INSERT INTO t1 SELECT * FROM t1 WHERE a IN (SELECT a FROM t1 WHERE a<10); diff --git a/test/select2.test b/test/select2.test index 1da4cc0c3e..73ed90f7d2 100644 --- a/test/select2.test +++ b/test/select2.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this file is testing the SELECT statement. # -# $Id: select2.test,v 1.20 2004/05/14 11:00:53 danielk1977 Exp $ +# $Id: select2.test,v 1.21 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -19,14 +19,11 @@ source $testdir/tester.tcl # Create a table with some data # execsql {CREATE TABLE tbl1(f1 int, f2 int)} -set f [open ./testdata1.txt w] +execsql {BEGIN} for {set i 0} {$i<=30} {incr i} { - puts $f "[expr {$i%9}]\t[expr {$i%10}]" + execsql "INSERT INTO tbl1 VALUES([expr {$i%9}],[expr {$i%10}])" } -close $f -execsql {COPY tbl1 FROM './testdata1.txt'} -file delete -force ./testdata1.txt -catch {unset data} +execsql {COMMIT} # Do a second query inside a first. # @@ -61,15 +58,11 @@ do_test select2-1.2 { # Create a largish table # do_test select2-2.0 { - execsql {CREATE TABLE tbl2(f1 int, f2 int, f3 int)} - set f [open ./testdata1.txt w] + execsql {CREATE TABLE tbl2(f1 int, f2 int, f3 int); BEGIN;} for {set i 1} {$i<=30000} {incr i} { - puts $f "$i\t[expr {$i*2}]\t[expr {$i*3}]" + execsql "INSERT INTO tbl2 VALUES($i,[expr {$i*2}],[expr {$i*3}])" } - close $f - # execsql {--vdbe-trace-on--} - execsql {COPY tbl2 FROM './testdata1.txt'} - file delete -force ./testdata1.txt + execsql {COMMIT} } {} do_test select2-2.1 { diff --git a/test/select3.test b/test/select3.test index a1adb2d8fe..0e9dc05b84 100644 --- a/test/select3.test +++ b/test/select3.test @@ -12,7 +12,7 @@ # focus of this file is testing aggregate functions and the # GROUP BY and HAVING clauses of SELECT statements. # -# $Id: select3.test,v 1.9 2004/05/21 02:14:25 drh Exp $ +# $Id: select3.test,v 1.10 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -20,17 +20,17 @@ source $testdir/tester.tcl # Build some test data # do_test select3-1.0 { - set fd [open data1.txt w] - for {set i 1} {$i<32} {incr i} { - for {set j 0} {pow(2,$j)<$i} {incr j} {} - puts $fd "$i\t$j" - } - close $fd execsql { CREATE TABLE t1(n int, log int); - COPY t1 FROM 'data1.txt' + BEGIN; + } + for {set i 1} {$i<32} {incr i} { + for {set j 0} {pow(2,$j)<$i} {incr j} {} + execsql "INSERT INTO t1 VALUES($i,$j)" + } + execsql { + COMMIT } - file delete data1.txt execsql {SELECT DISTINCT log FROM t1 ORDER BY log} } {0 1 2 3 4 5} diff --git a/test/select4.test b/test/select4.test index ddc43c448d..88f3eb6aff 100644 --- a/test/select4.test +++ b/test/select4.test @@ -12,24 +12,24 @@ # focus of this file is testing UNION, INTERSECT and EXCEPT operators # in SELECT statements. # -# $Id: select4.test,v 1.15 2004/05/14 11:00:53 danielk1977 Exp $ +# $Id: select4.test,v 1.16 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Build some test data # -set fd [open data1.txt w] -for {set i 1} {$i<32} {incr i} { - for {set j 0} {pow(2,$j)<$i} {incr j} {} - puts $fd "$i\t$j" -} -close $fd execsql { CREATE TABLE t1(n int, log int); - COPY t1 FROM 'data1.txt' + BEGIN; +} +for {set i 1} {$i<32} {incr i} { + for {set j 0} {pow(2,$j)<$i} {incr j} {} + execsql "INSERT INTO t1 VALUES($i,$j)" +} +execsql { + COMMIT; } -file delete data1.txt do_test select4-1.0 { execsql {SELECT DISTINCT log FROM t1 ORDER BY log} diff --git a/test/select5.test b/test/select5.test index a5095643cf..505eb5eab7 100644 --- a/test/select5.test +++ b/test/select5.test @@ -12,24 +12,24 @@ # focus of this file is testing aggregate functions and the # GROUP BY and HAVING clauses of SELECT statements. # -# $Id: select5.test,v 1.6 2001/10/15 00:44:36 drh Exp $ +# $Id: select5.test,v 1.7 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Build some test data # -set fd [open data1.txt w] -for {set i 1} {$i<32} {incr i} { - for {set j 0} {pow(2,$j)<$i} {incr j} {} - puts $fd "[expr {32-$i}]\t[expr {10-$j}]" -} -close $fd execsql { CREATE TABLE t1(x int, y int); - COPY t1 FROM 'data1.txt' + BEGIN; +} +for {set i 1} {$i<32} {incr i} { + for {set j 0} {pow(2,$j)<$i} {incr j} {} + execsql "INSERT INTO t1 VALUES([expr {32-$i}],[expr {10-$j}])" +} +execsql { + COMMIT } -file delete data1.txt do_test select5-1.0 { execsql {SELECT DISTINCT y FROM t1 ORDER BY y} diff --git a/test/sort.test b/test/sort.test index dee10f73b8..fd1b6b1fda 100644 --- a/test/sort.test +++ b/test/sort.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this file is testing the CREATE TABLE statement. # -# $Id: sort.test,v 1.11 2004/05/21 02:14:25 drh Exp $ +# $Id: sort.test,v 1.12 2004/05/27 17:22:56 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -19,16 +19,6 @@ source $testdir/tester.tcl # Create a bunch of data to sort against # do_test sort-1.0 { - set fd [open data.txt w] - puts $fd "1\tone\t0\tI\t3.141592653" - puts $fd "2\ttwo\t1\tII\t2.15" - puts $fd "3\tthree\t1\tIII\t4221.0" - puts $fd "4\tfour\t2\tIV\t-0.0013442" - puts $fd "5\tfive\t2\tV\t-11" - puts $fd "6\tsix\t2\tVI\t0.123" - puts $fd "7\tseven\t2\tVII\t123.0" - puts $fd "8\teight\t3\tVIII\t-1.6" - close $fd execsql { CREATE TABLE t1( n int, @@ -37,9 +27,15 @@ do_test sort-1.0 { roman varchar(10), flt real ); - COPY t1 FROM 'data.txt' + INSERT INTO t1 VALUES(1,'one',0,'I',3.141592653); + INSERT INTO t1 VALUES(2,'two',1,'II',2.15); + INSERT INTO t1 VALUES(3,'three',1,'III',4221.0); + INSERT INTO t1 VALUES(4,'four',2,'IV',-0.0013442); + INSERT INTO t1 VALUES(5,'five',2,'V',-11); + INSERT INTO t1 VALUES(6,'six',2,'VI',0.123); + INSERT INTO t1 VALUES(7,'seven',2,'VII',123.0); + INSERT INTO t1 VALUES(8,'eight',3,'VIII',-1.6); } - file delete data.txt execsql {SELECT count(*) FROM t1} } {8}