1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-09 14:21:03 +03:00

Allow underscores to occur in hex literals.

FossilOrigin-Name: 81a56229460cc5b6acfd3c3729fcf89ea3cccb546ca2b4f4035b140c60911e18
This commit is contained in:
dan
2024-01-22 19:38:55 +00:00
parent fbb72fae8f
commit 8374f7dfaf
7 changed files with 98 additions and 58 deletions

View File

@@ -437,58 +437,70 @@ int sqlite3GetToken(const unsigned char *z, int *tokenType){
*tokenType = TK_INTEGER;
#ifndef SQLITE_OMIT_HEX_INTEGER
if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){
for(i=3; sqlite3Isxdigit(z[i]); i++){}
return i;
}
#endif
for(i=0; 1; i++){
if( sqlite3Isdigit(z[i])==0 ){
if( z[i]==SQLITE_DIGIT_SEPARATOR
&& sqlite3Isdigit(z[i-1])
&& sqlite3Isdigit(z[i+1])
){
*tokenType = TK_QNUMBER;
}else{
break;
for(i=3; 1; i++){
if( sqlite3Isxdigit(z[i])==0 ){
if( z[i]==SQLITE_DIGIT_SEPARATOR
&& sqlite3Isxdigit(z[i-1])
&& sqlite3Isxdigit(z[i+1])
){
*tokenType = TK_QNUMBER;
}else{
break;
}
}
}
}else
#endif
{
for(i=0; 1; i++){
if( sqlite3Isdigit(z[i])==0 ){
if( z[i]==SQLITE_DIGIT_SEPARATOR
&& sqlite3Isdigit(z[i-1])
&& sqlite3Isdigit(z[i+1])
){
*tokenType = TK_QNUMBER;
}else{
break;
}
}
}
}
#ifndef SQLITE_OMIT_FLOATING_POINT
if( z[i]=='.' ){
if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
for(i++; 1; i++){
if( sqlite3Isdigit(z[i])==0 ){
if( z[i]==SQLITE_DIGIT_SEPARATOR
&& sqlite3Isdigit(z[i-1])
&& sqlite3Isdigit(z[i+1])
){
*tokenType = TK_QNUMBER;
}else{
break;
if( z[i]=='.' ){
if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
for(i++; 1; i++){
if( sqlite3Isdigit(z[i])==0 ){
if( z[i]==SQLITE_DIGIT_SEPARATOR
&& sqlite3Isdigit(z[i-1])
&& sqlite3Isdigit(z[i+1])
){
*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]))
)
){
if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
for(i+=2; 1; i++){
if( sqlite3Isdigit(z[i])==0 ){
if( z[i]==SQLITE_DIGIT_SEPARATOR
&& sqlite3Isdigit(z[i-1])
&& sqlite3Isdigit(z[i+1])
){
*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]))
)
){
if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
for(i+=2; 1; i++){
if( sqlite3Isdigit(z[i])==0 ){
if( z[i]==SQLITE_DIGIT_SEPARATOR
&& sqlite3Isdigit(z[i-1])
&& sqlite3Isdigit(z[i+1])
){
*tokenType = TK_QNUMBER;
}else{
break;
}
}
}
}
}
#endif
}
while( IdChar(z[i]) ){
*tokenType = TK_ILLEGAL;
i++;