Upgrade bundled library to 2.8.14 + misc fixes

(http://www.sqlite.org/cvstrac/chngview?cn=1742)
This commit is contained in:
Wez Furlong 2004-07-10 12:27:51 +00:00
parent cd732f1a3f
commit e563b4eafa
43 changed files with 5953 additions and 5559 deletions

View file

@ -417,120 +417,11 @@ void sqliteSetNString(char **pz, ...){
*/
void sqliteErrorMsg(Parse *pParse, const char *zFormat, ...){
va_list ap;
int nByte;
int i, j;
char *z;
static char zNull[] = "NULL";
pParse->nErr++;
nByte = 1 + strlen(zFormat);
va_start(ap, zFormat);
for(i=0; zFormat[i]; i++){
if( zFormat[i]!='%' || zFormat[i+1]==0 ) continue;
i++;
switch( zFormat[i] ){
case 'd': {
(void)va_arg(ap, int);
nByte += 20;
break;
}
case 'z':
case 's': {
char *z2 = va_arg(ap, char*);
if( z2==0 ) z2 = zNull;
nByte += strlen(z2);
break;
}
case 'T': {
Token *p = va_arg(ap, Token*);
nByte += p->n;
break;
}
case 'S': {
SrcList *p = va_arg(ap, SrcList*);
int k = va_arg(ap, int);
assert( p->nSrc>k && k>=0 );
nByte += strlen(p->a[k].zName);
if( p->a[k].zDatabase && p->a[k].zDatabase[0] ){
nByte += strlen(p->a[k].zDatabase)+1;
}
break;
}
default: {
nByte++;
break;
}
}
}
va_end(ap);
z = sqliteMalloc( nByte );
if( z==0 ) return;
sqliteFree(pParse->zErrMsg);
pParse->zErrMsg = z;
va_start(ap, zFormat);
for(i=j=0; zFormat[i]; i++){
if( zFormat[i]!='%' || zFormat[i+1]==0 ) continue;
if( i>j ){
memcpy(z, &zFormat[j], i-j);
z += i-j;
}
j = i+2;
i++;
switch( zFormat[i] ){
case 'd': {
int x = va_arg(ap, int);
sprintf(z, "%d", x);
z += strlen(z);
break;
}
case 'z':
case 's': {
int len;
char *z2 = va_arg(ap, char*);
if( z2==0 ) z2 = zNull;
len = strlen(z2);
memcpy(z, z2, len);
z += len;
if( zFormat[i]=='z' && z2!=zNull ){
sqliteFree(z2);
}
break;
}
case 'T': {
Token *p = va_arg(ap, Token*);
memcpy(z, p->z, p->n);
z += p->n;
break;
}
case 'S': {
int len;
SrcList *p = va_arg(ap, SrcList*);
int k = va_arg(ap, int);
assert( p->nSrc>k && k>=0 );
if( p->a[k].zDatabase && p->a[k].zDatabase[0] ){
len = strlen(p->a[k].zDatabase);
memcpy(z, p->a[k].zDatabase, len);
z += len;
*(z++) = '.';
}
len = strlen(p->a[k].zName);
memcpy(z, p->a[k].zName, len);
z += len;
break;
}
default: {
*(z++) = zFormat[i];
break;
}
}
}
pParse->zErrMsg = sqliteVMPrintf(zFormat, ap);
va_end(ap);
if( i>j ){
memcpy(z, &zFormat[j], i-j);
z += i-j;
}
assert( (z - pParse->zErrMsg) < nByte );
*z = 0;
}
/*
@ -662,7 +553,7 @@ int sqliteIsNumber(const char *z){
** of "." depending on how locale is set. But that would cause problems
** for SQL. So this routine always uses "." regardless of locale.
*/
double sqliteAtoF(const char *z){
double sqliteAtoF(const char *z, const char **pzEnd){
int sign = 1;
LONGDOUBLE_TYPE v1 = 0.0;
if( *z=='-' ){
@ -710,6 +601,7 @@ double sqliteAtoF(const char *z){
v1 *= scale;
}
}
if( pzEnd ) *pzEnd = z;
return sign<0 ? -v1 : v1;
}
@ -759,8 +651,8 @@ int sqliteCompare(const char *atext, const char *btext){
result = -1;
}else{
double rA, rB;
rA = sqliteAtoF(atext);
rB = sqliteAtoF(btext);
rA = sqliteAtoF(atext, 0);
rB = sqliteAtoF(btext, 0);
if( rA<rB ){
result = -1;
}else if( rA>rB ){
@ -852,8 +744,8 @@ int sqliteSortCompare(const char *a, const char *b){
res = -1;
break;
}
rA = sqliteAtoF(&a[1]);
rB = sqliteAtoF(&b[1]);
rA = sqliteAtoF(&a[1], 0);
rB = sqliteAtoF(&b[1], 0);
if( rA<rB ){
res = -1;
break;