]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
:-) (CVS 100)
authordrh <drh@noemail.net>
Fri, 16 Jun 2000 20:51:26 +0000 (20:51 +0000)
committerdrh <drh@noemail.net>
Fri, 16 Jun 2000 20:51:26 +0000 (20:51 +0000)
FossilOrigin-Name: 1d4fe5599ed0bae18dba5842ab7ea1d34b8ec3ad

manifest
manifest.uuid
src/expr.c
src/parse.y
src/tokenize.c
test/expr.test
test/main.test
www/changes.tcl

index f4ec6d1cde0a3d9b279c1a54bfaee5ad4b91eb20..298b135172d04283467d31e0b3a9c9f623071f42 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C :-)\s(CVS\s99)
-D 2000-06-15T16:49:49
+C :-)\s(CVS\s100)
+D 2000-06-16T20:51:26
 F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4
 F Makefile.in 4dc16840f68e3b599915e1ec8463d365474dd286
 F README 51f6a4e7408b34afa5bc1c0485f61b6a4efb6958
@@ -10,16 +10,16 @@ F src/build.c 925a785da2758269cb8773691e157ea5269178ba
 F src/dbbe.c 4129779d7199c05200482046182f718a122f8c96
 F src/dbbe.h a8a46f71238e0f09f3ec08fd9d1c8c7f4cdc49bf
 F src/delete.c c267b93f7ccb5493b677fa18201880267c699aa8
-F src/expr.c 81512e0ae54de0d347c9dbd7ed8928028f4e1b41
+F src/expr.c a6797a4bd02b22835ffbbab8bd63dd91cc60ca3d
 F src/insert.c ac4edfff474589c00b2490f206317dc5822122e5
 F src/main.c e3297835b8e38ca726ac73f2c2bdb7cf08103197
-F src/parse.y 6a3085fd8e2c477e73468e6d1a278cb72254c0c9
+F src/parse.y 766844e4c695d560b4df5b5999162d5e167e3c90
 F src/select.c 3a12d76074fa57d7c39c4436bdeb8d7e1eb6fdf4
 F src/shell.c 78a35607a88b3d557e1666ae9d0c2c03cbb3553e
 F src/sqlite.h 58da0a8590133777b741f9836beaef3d58f40268
 F src/sqliteInt.h 19954bd2f75632849b265b9d7163a67391ec5148
 F src/tclsqlite.c 9f358618ae803bedf4fb96da5154fd45023bc1f7
-F src/tokenize.c 344754f81b55da5b19ea9504dfa16a9de68cd5ba
+F src/tokenize.c 77ff8164a8751994bc9926ce282847f653ac0c16
 F src/update.c d8d90df714bac99c68446a0c49f3d957ca6fc3c8
 F src/util.c 38e4bb5edf6fa92e677698c45785bf73c69b9e9f
 F src/vdbe.c 00b2ab7e0c0df2ac6eb4bf659656afc30e76c66b
@@ -29,12 +29,12 @@ F test/all.test 0950c135cab7e60c07bd745ccfad1476211e5bd7
 F test/copy.test b77a1214bd7756f2849d5c4fa6e715c0ff0c34eb
 F test/dbbe.test 0a8e4293cf816e590dcbb01be4cd4e8f7f95bdc8
 F test/delete.test 30edd2c7484274fb2e7dbc4a1ac769bb330b322e
-F test/expr.test 2209a2b06ea10ebb844b2c4ae08fe8345e5b87b2
+F test/expr.test 09b55ccf81cb8cc2f9cd83d592a2ba187ee48ba8
 F test/in.test 962a605b6a3a619214f84d1950dfc44fcf0d8b8f
 F test/index.test 79550e86e5c6954f8b7a8a8c5221224dfd8c3f11
 F test/insert.test 66f4c3bd600fec8eb1e733b928cbe6fa885eff0c
 F test/insert2.test 732405e30331635af8d159fccabe835eea5cd0c6
-F test/main.test a6c92ebc66b990b601a2f67bbd02404310a820e4
+F test/main.test b7366cc6f3690915a11834bc1090deeff08acaf9
 F test/select1.test 64703852af34c85bb31b0a74bd73b340e8267f42
 F test/select2.test 5e2783a48360b83956366ea24b2c5f0293015a84
 F test/select3.test a9234b8424b6c6d71de534f43b91ade9be68e9cc
@@ -58,13 +58,13 @@ F www/arch.fig 4e26e9dca3c49724fc8f554c695ddea9f2413156
 F www/arch.png c4d908b79065a72e7dcf19317f36d1324c550e87
 F www/arch.tcl 4f6a9afecc099a27bba17b4f8cc9561abc15dc40
 F www/c_interface.tcl 9ac800854272db5fe439e07b7435b243a5422293
-F www/changes.tcl d78eb88c0577b72b87b4bbd89732de6fa7fac17a
+F www/changes.tcl 7430f73d9426021bceb5316afbbdd227848a9967
 F www/fileformat.tcl b11435fcd2cf2238a1c5e6d16fe5e83bcd14d434
 F www/index.tcl 4116afce6a8c63d68882d2b00aa10b079e0129cd
 F www/lang.tcl 1645e9107d75709be4c6099b643db235bbe0a151
 F www/opcode.tcl 3cdc4bb2515fcfcbe853e3f0c91cd9199e82dadd
 F www/sqlite.tcl 5420eab24b539928f80ea9b3088e2549d34f438d
-P f26d0cdf45221a8fc97253c2a1939e79ae866fc9
-R 3d6fd2505d53920665c06f6bc8a3f7f8
+P ac38f460c8f5b9e5bb9d3cf2549f1787055f05cf
+R eb3ea9e7c9df77f640bf4616de9a692b
 U drh
-Z 2f294d1f9fc8c0dea244e0fb7909addf
+Z 1e0f1e829cfb4a46f528efe2fb7a735b
index 84c6bdd81e333e632b7adab4ebd2dabd0d10d8ac..4cc60aef3ba44759977b169e3c57a80fd0b490c0 100644 (file)
@@ -1 +1 @@
-ac38f460c8f5b9e5bb9d3cf2549f1787055f05cf
\ No newline at end of file
+1d4fe5599ed0bae18dba5842ab7ea1d34b8ec3ad
\ No newline at end of file
index 01d41f70481b233e691770ecf714a8d7129e8023..7ca71230099f8c214442fd67c7c6b10a55b5e01d 100644 (file)
@@ -23,7 +23,7 @@
 *************************************************************************
 ** This file contains C code routines used for processing expressions
 **
-** $Id: expr.c,v 1.15 2000/06/11 23:50:13 drh Exp $
+** $Id: expr.c,v 1.16 2000/06/16 20:51:26 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -505,6 +505,12 @@ void sqliteExprCode(Parse *pParse, Expr *pExpr){
       sqliteVdbeAddOp(v, op, 0, 0, 0, 0);
       break;
     }
+    case TK_CONCAT: {
+      sqliteExprCode(pParse, pExpr->pLeft);
+      sqliteExprCode(pParse, pExpr->pRight);
+      sqliteVdbeAddOp(v, OP_Concat, 2, 0, 0, 0);
+      break;
+    }
     case TK_LT:
     case TK_LE:
     case TK_GT:
index 6e17705fba7804bcf66b2e615089ca8adececb24..417891122da30520dd7e6c0e03b830903318e98a 100644 (file)
@@ -26,7 +26,7 @@
 ** the parser.  Lemon will also generate a header file containing
 ** numeric codes for all of the tokens.
 **
-** @(#) $Id: parse.y,v 1.20 2000/06/09 14:14:33 drh Exp $
+** @(#) $Id: parse.y,v 1.21 2000/06/16 20:51:26 drh Exp $
 */
 %token_prefix TK_
 %token_type {Token}
@@ -297,6 +297,7 @@ fieldlist(A) ::= id(Y).                    {A = sqliteIdListAppend(0,&Y);}
 %left GT GE LT LE.
 %left PLUS MINUS.
 %left STAR SLASH.
+%left CONCAT.
 %right UMINUS.
 
 %type expr {Expr*}
@@ -335,6 +336,7 @@ expr(A) ::= expr(X) PLUS expr(Y).  {A = sqliteExpr(TK_PLUS, X, Y, 0);}
 expr(A) ::= expr(X) MINUS expr(Y). {A = sqliteExpr(TK_MINUS, X, Y, 0);}
 expr(A) ::= expr(X) STAR expr(Y).  {A = sqliteExpr(TK_STAR, X, Y, 0);}
 expr(A) ::= expr(X) SLASH expr(Y). {A = sqliteExpr(TK_SLASH, X, Y, 0);}
+expr(A) ::= expr(X) CONCAT expr(Y). {A = sqliteExpr(TK_CONCAT, X, Y, 0);}
 expr(A) ::= expr(X) ISNULL.        {A = sqliteExpr(TK_ISNULL, X, 0, 0);}
 expr(A) ::= expr(X) NOTNULL.       {A = sqliteExpr(TK_NOTNULL, X, 0, 0);}
 expr(A) ::= NOT expr(X).           {A = sqliteExpr(TK_NOT, X, 0, 0);}
index c583930dde400d657b94400de9ec5675d3da913a..c4d29f5857f43391655bce5ff4bdaef0ac4df799 100644 (file)
@@ -27,7 +27,7 @@
 ** individual tokens and sends those tokens one-by-one over to the
 ** parser for analysis.
 **
-** $Id: tokenize.c,v 1.11 2000/06/08 16:26:24 drh Exp $
+** $Id: tokenize.c,v 1.12 2000/06/16 20:51:26 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -217,6 +217,15 @@ int sqliteGetToken(const char *z, int *tokenType){
         return 2;
       }
     }
+    case '|': {
+      if( z[1]!='|' ){
+        *tokenType = TK_ILLEGAL;
+        return 1;
+      }else{
+        *tokenType = TK_CONCAT;
+        return 2;
+      }
+    }
     case ',': {
       *tokenType = TK_COMMA;
       return 1;
index d6341958a2b91e5263e9b34a26a195807a731f69..da529d856f9d77cf5c5e9cdff210b213550102fe 100644 (file)
@@ -23,7 +23,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing expressions.
 #
-# $Id: expr.test,v 1.7 2000/06/08 16:26:25 drh Exp $
+# $Id: expr.test,v 1.8 2000/06/16 20:51:26 drh Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -129,6 +129,10 @@ test_expr expr-3.25 {t1=NULL, t2='hi'} {t1 isnull} 1
 test_expr expr-3.26 {t1=NULL, t2='hi'} {t2 isnull} 0
 test_expr expr-3.27 {t1=NULL, t2='hi'} {t1 notnull} 0
 test_expr expr-3.28 {t1=NULL, t2='hi'} {t2 notnull} 1
+test_expr expr-3.29 {t1='xyz', t2='abc'} {t1||t2} {xyzabc}
+test_expr expr-3.30 {t1=NULL, t2='abc'} {t1||t2} {abc}
+test_expr expr-3.31 {t1='xyz', t2=NULL} {t1||t2} {xyz}
+test_expr expr-3.32 {t1='xyz', t2='abc'} {t1||' hi '||t2} {{xyz hi abc}}
 
 test_expr expr-4.1 {t1='abc', t2='Abc'} {t1<t2} 0
 test_expr expr-4.2 {t1='abc', t2='Abc'} {t1>t2} 1
index 07763e6a293a4d3650a6305617b755a540212d13..c2807970b343bb8d7f653f4f281ae81515477a88 100644 (file)
@@ -23,7 +23,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is exercising the code in main.c.
 #
-# $Id: main.test,v 1.2 2000/06/08 16:26:25 drh Exp $
+# $Id: main.test,v 1.3 2000/06/16 20:51:26 drh Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -78,6 +78,13 @@ do_test main-3.2 {
   set v [catch {execsql {SELECT * from T1 where ~x}} msg]
   lappend v $msg
 } {1 {unrecognized token: "~"}}
+do_test main-3.3 {
+  catch {db close}
+  file delete -force testdb
+  sqlite db testdb
+  set v [catch {execsql {SELECT a|b from T1 where x}} msg]
+  lappend v $msg
+} {1 {unrecognized token: "|"}}
 
 do_test main-3.3 {
   catch {db close}
index 452bf7cccb1e4d84739305ce99b39f64fead3ac9..3058979c680c1e64fc5ec186ee63cfb119d72d99 100644 (file)
@@ -17,6 +17,10 @@ proc chng {date desc} {
   puts "<DD><P><UL>$desc</UL></P></DD>"
 }
 
+chng {2000 June 16} {
+<li>Added the concatenate string operator (||)</li>
+}
+
 chng {2000 June 12} {
 <li>Added the fcnt() function to the SQL interpreter.  The fcnt() function
     returns the number of database "Fetch" operations that have occurred.