Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | :-) (CVS 18) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
2d41caec807a6ab83b67e59c849ebbda |
User & Date: | drh 2000-05-30 19:22:26.000 |
Context
2000-05-30
| ||
20:17 | :-) (CVS 19) (check-in: 03725ce5ae user: drh tags: trunk) | |
19:22 | :-) (CVS 18) (check-in: 2d41caec80 user: drh tags: trunk) | |
18:45 | loads the complete ACD database! (CVS 17) (check-in: 97a0fb780e user: drh tags: trunk) | |
Changes
Changes to src/build.c.
︙ | ︙ | |||
20 21 22 23 24 25 26 | ** drh@hwaci.com ** http://www.hwaci.com/drh/ ** ************************************************************************* ** This file contains C code routines that are called by the parser ** when syntax rules are reduced. ** | | | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ** drh@hwaci.com ** http://www.hwaci.com/drh/ ** ************************************************************************* ** This file contains C code routines that are called by the parser ** when syntax rules are reduced. ** ** $Id: build.c,v 1.9 2000/05/30 19:22:26 drh Exp $ */ #include "sqliteInt.h" /* ** This routine is called after a single SQL statement has been ** parsed and we want to execute the code to implement ** the statement. Prior action routines should have already |
︙ | ︙ | |||
879 880 881 882 883 884 885 | int sqliteExprResolveIds(Parse *pParse, IdList *pTabList, Expr *pExpr){ if( pExpr==0 ) return 0; switch( pExpr->op ){ /* A lone identifier */ case TK_ID: { int cnt = 0; /* Number of matches */ int i; /* Loop counter */ | | | | > | 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 | int sqliteExprResolveIds(Parse *pParse, IdList *pTabList, Expr *pExpr){ if( pExpr==0 ) return 0; switch( pExpr->op ){ /* A lone identifier */ case TK_ID: { int cnt = 0; /* Number of matches */ int i; /* Loop counter */ char *z = 0; sqliteSetNString(&z, pExpr->token.z, pExpr->token.n, 0); for(i=0; i<pTabList->nId; i++){ int j; Table *pTab = pTabList->a[i].pTab; if( pTab==0 ) continue; for(j=0; j<pTab->nCol; j++){ if( sqliteStrICmp(pTab->azCol[j], z)==0 ){ cnt++; pExpr->iTable = i; pExpr->iField = j; } } } sqliteFree(z); if( cnt==0 ){ sqliteSetNString(&pParse->zErrMsg, "no such field: ", -1, pExpr->token.z, pExpr->token.n, 0); pParse->nErr++; return 1; }else if( cnt>1 ){ sqliteSetNString(&pParse->zErrMsg, "ambiguous field name: ", -1, |
︙ | ︙ | |||
914 915 916 917 918 919 920 | /* A table name and field name: ID.ID */ case TK_DOT: { int cnt = 0; /* Number of matches */ int i; /* Loop counter */ Expr *pLeft, *pRight; /* Left and right subbranches of the expr */ int n; /* Length of an identifier */ | | > > | | | | > > | > > | | 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 | /* A table name and field name: ID.ID */ case TK_DOT: { int cnt = 0; /* Number of matches */ int i; /* Loop counter */ Expr *pLeft, *pRight; /* Left and right subbranches of the expr */ int n; /* Length of an identifier */ char *zLeft, *zRight; /* Text of an identifier */ pLeft = pExpr->pLeft; pRight = pExpr->pRight; assert( pLeft && pLeft->op==TK_ID ); assert( pRight && pRight->op==TK_ID ); zLeft = 0; sqliteSetNString(&zLeft, pLeft->token.z, pLeft->token.n, 0); zRight = 0; sqliteSetNString(&zRight, pRight->token.z, pRight->token.n, 0); for(i=0; i<pTabList->nId; i++){ int j; char *zTab; Table *pTab = pTabList->a[i].pTab; if( pTab==0 ) continue; if( pTabList->a[i].zAlias ){ zTab = pTabList->a[i].zAlias; }else{ zTab = pTab->zName; } if( sqliteStrICmp(zTab, zLeft)!=0 ) continue; for(j=0; j<pTab->nCol; j++){ if( sqliteStrICmp(pTab->azCol[j], zRight)==0 ){ cnt++; pExpr->iTable = i; pExpr->iField = j; } } } sqliteFree(zLeft); sqliteFree(zRight); if( cnt==0 ){ sqliteSetNString(&pParse->zErrMsg, "no such field: ", -1, pLeft->token.z, pLeft->token.n, ".", 1, pRight->token.z, pRight->token.n, 0); pParse->nErr++; return 1; }else if( cnt>1 ){ sqliteSetNString(&pParse->zErrMsg, "ambiguous field name: ", -1, pLeft->token.z, pLeft->token.n, ".", 1, pRight->token.z, pRight->token.n, 0); pParse->nErr++; return 1; } sqliteExprDelete(pLeft); pExpr->pLeft = 0; sqliteExprDelete(pRight); pExpr->pRight = 0; |
︙ | ︙ |