aboutsummaryrefslogtreecommitdiff
path: root/src/tokenize.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tokenize.c')
-rw-r--r--src/tokenize.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/tokenize.c b/src/tokenize.c
index f4d013dee..ae1f6da3f 100644
--- a/src/tokenize.c
+++ b/src/tokenize.c
@@ -441,21 +441,34 @@ int sqlite3GetToken(const unsigned char *z, int *tokenType){
return i;
}
#endif
- for(i=0; sqlite3Isdigit(z[i]); i++){}
+ for(i=0; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){ *tokenType = TK_QNUMBER; }
+ else{ break; }
+ }
+ }
#ifndef SQLITE_OMIT_FLOATING_POINT
if( z[i]=='.' ){
- i++;
- while( sqlite3Isdigit(z[i]) ){ i++; }
- *tokenType = TK_FLOAT;
+ if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
+ for(i++; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){ *tokenType = TK_QNUMBER; }
+ else{ break; }
+ }
+ }
}
if( (z[i]=='e' || z[i]=='E') &&
( sqlite3Isdigit(z[i+1])
|| ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
)
){
- i += 2;
- while( sqlite3Isdigit(z[i]) ){ i++; }
- *tokenType = TK_FLOAT;
+ if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
+ for(i+=2; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){ *tokenType = TK_QNUMBER; }
+ else{ break; }
+ }
+ }
}
#endif
while( IdChar(z[i]) ){