| | @@ -546,11 +546,11 @@ |
| 546 | 546 | */ |
| 547 | 547 | #if defined(_WIN32) || defined(WIN32) |
| 548 | 548 | void utf8_printf(FILE *out, const char *zFormat, ...){ |
| 549 | 549 | va_list ap; |
| 550 | 550 | va_start(ap, zFormat); |
| 551 | | - if( stdout_is_console && out==stdout ){ |
| 551 | + if( stdout_is_console && (out==stdout || out==stderr) ){ |
| 552 | 552 | extern char *sqlite3_win32_utf8_to_mbcs(const char*); |
| 553 | 553 | char *z1 = sqlite3_vmprintf(zFormat, ap); |
| 554 | 554 | char *z2 = sqlite3_win32_utf8_to_mbcs(z1); |
| 555 | 555 | sqlite3_free(z1); |
| 556 | 556 | fputs(z2, out); |
| | @@ -558,14 +558,22 @@ |
| 558 | 558 | }else{ |
| 559 | 559 | vfprintf(out, zFormat, ap); |
| 560 | 560 | } |
| 561 | 561 | va_end(ap); |
| 562 | 562 | } |
| 563 | | -#else |
| 563 | +#elif !defined(utf8_printf) |
| 564 | 564 | # define utf8_printf fprintf |
| 565 | 565 | #endif |
| 566 | 566 | |
| 567 | +/* |
| 568 | +** Render output like fprintf(). This should not be used on anything that |
| 569 | +** includes string formatting (e.g. "%s"). |
| 570 | +*/ |
| 571 | +#if !defined(raw_printf) |
| 572 | +# define raw_printf fprintf |
| 573 | +#endif |
| 574 | + |
| 567 | 575 | /* |
| 568 | 576 | ** Shell output mode information from before ".explain on", |
| 569 | 577 | ** saved so that it can be restored by ".explain off" |
| 570 | 578 | */ |
| 571 | 579 | typedef struct SavedModeInfo SavedModeInfo; |
| | @@ -673,23 +681,23 @@ |
| 673 | 681 | ** A callback for the sqlite3_log() interface. |
| 674 | 682 | */ |
| 675 | 683 | static void shellLog(void *pArg, int iErrCode, const char *zMsg){ |
| 676 | 684 | ShellState *p = (ShellState*)pArg; |
| 677 | 685 | if( p->pLog==0 ) return; |
| 678 | | - fprintf(p->pLog, "(%d) %s\n", iErrCode, zMsg); |
| 686 | + utf8_printf(p->pLog, "(%d) %s\n", iErrCode, zMsg); |
| 679 | 687 | fflush(p->pLog); |
| 680 | 688 | } |
| 681 | 689 | |
| 682 | 690 | /* |
| 683 | 691 | ** Output the given string as a hex-encoded blob (eg. X'1234' ) |
| 684 | 692 | */ |
| 685 | 693 | static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){ |
| 686 | 694 | int i; |
| 687 | 695 | char *zBlob = (char *)pBlob; |
| 688 | | - fprintf(out,"X'"); |
| 689 | | - for(i=0; i<nBlob; i++){ fprintf(out,"%02x",zBlob[i]&0xff); } |
| 690 | | - fprintf(out,"'"); |
| 696 | + raw_printf(out,"X'"); |
| 697 | + for(i=0; i<nBlob; i++){ raw_printf(out,"%02x",zBlob[i]&0xff); } |
| 698 | + raw_printf(out,"'"); |
| 691 | 699 | } |
| 692 | 700 | |
| 693 | 701 | /* |
| 694 | 702 | ** Output the given string as a quoted string using SQL quoting conventions. |
| 695 | 703 | */ |
| | @@ -701,25 +709,25 @@ |
| 701 | 709 | if( z[i]=='\'' ) nSingle++; |
| 702 | 710 | } |
| 703 | 711 | if( nSingle==0 ){ |
| 704 | 712 | utf8_printf(out,"'%s'",z); |
| 705 | 713 | }else{ |
| 706 | | - fprintf(out,"'"); |
| 714 | + raw_printf(out,"'"); |
| 707 | 715 | while( *z ){ |
| 708 | 716 | for(i=0; z[i] && z[i]!='\''; i++){} |
| 709 | 717 | if( i==0 ){ |
| 710 | | - fprintf(out,"''"); |
| 718 | + raw_printf(out,"''"); |
| 711 | 719 | z++; |
| 712 | 720 | }else if( z[i]=='\'' ){ |
| 713 | 721 | utf8_printf(out,"%.*s''",i,z); |
| 714 | 722 | z += i+1; |
| 715 | 723 | }else{ |
| 716 | 724 | utf8_printf(out,"%s",z); |
| 717 | 725 | break; |
| 718 | 726 | } |
| 719 | 727 | } |
| 720 | | - fprintf(out,"'"); |
| 728 | + raw_printf(out,"'"); |
| 721 | 729 | } |
| 722 | 730 | setTextMode(out); |
| 723 | 731 | } |
| 724 | 732 | |
| 725 | 733 | /* |
| | @@ -743,11 +751,11 @@ |
| 743 | 751 | fputc('n', out); |
| 744 | 752 | }else if( c=='\r' ){ |
| 745 | 753 | fputc('\\', out); |
| 746 | 754 | fputc('r', out); |
| 747 | 755 | }else if( !isprint(c&0xff) ){ |
| 748 | | - fprintf(out, "\\%03o", c&0xff); |
| 756 | + raw_printf(out, "\\%03o", c&0xff); |
| 749 | 757 | }else{ |
| 750 | 758 | fputc(c, out); |
| 751 | 759 | } |
| 752 | 760 | } |
| 753 | 761 | fputc('"', out); |
| | @@ -770,19 +778,19 @@ |
| 770 | 778 | i++){} |
| 771 | 779 | if( i>0 ){ |
| 772 | 780 | utf8_printf(out,"%.*s",i,z); |
| 773 | 781 | } |
| 774 | 782 | if( z[i]=='<' ){ |
| 775 | | - fprintf(out,"<"); |
| 783 | + raw_printf(out,"<"); |
| 776 | 784 | }else if( z[i]=='&' ){ |
| 777 | | - fprintf(out,"&"); |
| 785 | + raw_printf(out,"&"); |
| 778 | 786 | }else if( z[i]=='>' ){ |
| 779 | | - fprintf(out,">"); |
| 787 | + raw_printf(out,">"); |
| 780 | 788 | }else if( z[i]=='\"' ){ |
| 781 | | - fprintf(out,"""); |
| 789 | + raw_printf(out,"""); |
| 782 | 790 | }else if( z[i]=='\'' ){ |
| 783 | | - fprintf(out,"'"); |
| 791 | + raw_printf(out,"'"); |
| 784 | 792 | }else{ |
| 785 | 793 | break; |
| 786 | 794 | } |
| 787 | 795 | z += i + 1; |
| 788 | 796 | } |
| | @@ -925,11 +933,11 @@ |
| 925 | 933 | w = p->actualWidth[i]; |
| 926 | 934 | if( w<0 ) w = -w; |
| 927 | 935 | }else{ |
| 928 | 936 | w = 10; |
| 929 | 937 | } |
| 930 | | - fprintf(p->out,"%-*.*s%s",w,w, |
| 938 | + utf8_printf(p->out,"%-*.*s%s",w,w, |
| 931 | 939 | "----------------------------------------------------------" |
| 932 | 940 | "----------------------------------------------------------", |
| 933 | 941 | i==nArg-1 ? p->rowSeparator : " "); |
| 934 | 942 | } |
| 935 | 943 | } |
| | @@ -945,11 +953,11 @@ |
| 945 | 953 | if( p->mode==MODE_Explain && azArg[i] && strlen30(azArg[i])>w ){ |
| 946 | 954 | w = strlen30(azArg[i]); |
| 947 | 955 | } |
| 948 | 956 | if( i==1 && p->aiIndent && p->pStmt ){ |
| 949 | 957 | if( p->iIndent<p->nIndent ){ |
| 950 | | - fprintf(p->out, "%*.s", p->aiIndent[p->iIndent], ""); |
| 958 | + utf8_printf(p->out, "%*.s", p->aiIndent[p->iIndent], ""); |
| 951 | 959 | } |
| 952 | 960 | p->iIndent++; |
| 953 | 961 | } |
| 954 | 962 | if( w<0 ){ |
| 955 | 963 | utf8_printf(p->out,"%*.*s%s",-w,-w, |
| | @@ -986,26 +994,26 @@ |
| 986 | 994 | } |
| 987 | 995 | break; |
| 988 | 996 | } |
| 989 | 997 | case MODE_Html: { |
| 990 | 998 | if( p->cnt++==0 && p->showHeader ){ |
| 991 | | - fprintf(p->out,"<TR>"); |
| 999 | + raw_printf(p->out,"<TR>"); |
| 992 | 1000 | for(i=0; i<nArg; i++){ |
| 993 | | - fprintf(p->out,"<TH>"); |
| 1001 | + raw_printf(p->out,"<TH>"); |
| 994 | 1002 | output_html_string(p->out, azCol[i]); |
| 995 | | - fprintf(p->out,"</TH>\n"); |
| 1003 | + raw_printf(p->out,"</TH>\n"); |
| 996 | 1004 | } |
| 997 | | - fprintf(p->out,"</TR>\n"); |
| 1005 | + raw_printf(p->out,"</TR>\n"); |
| 998 | 1006 | } |
| 999 | 1007 | if( azArg==0 ) break; |
| 1000 | | - fprintf(p->out,"<TR>"); |
| 1008 | + raw_printf(p->out,"<TR>"); |
| 1001 | 1009 | for(i=0; i<nArg; i++){ |
| 1002 | | - fprintf(p->out,"<TD>"); |
| 1010 | + raw_printf(p->out,"<TD>"); |
| 1003 | 1011 | output_html_string(p->out, azArg[i] ? azArg[i] : p->nullValue); |
| 1004 | | - fprintf(p->out,"</TD>\n"); |
| 1012 | + raw_printf(p->out,"</TD>\n"); |
| 1005 | 1013 | } |
| 1006 | | - fprintf(p->out,"</TR>\n"); |
| 1014 | + raw_printf(p->out,"</TR>\n"); |
| 1007 | 1015 | break; |
| 1008 | 1016 | } |
| 1009 | 1017 | case MODE_Tcl: { |
| 1010 | 1018 | if( p->cnt++==0 && p->showHeader ){ |
| 1011 | 1019 | for(i=0; i<nArg; i++){ |
| | @@ -1042,41 +1050,41 @@ |
| 1042 | 1050 | case MODE_Insert: { |
| 1043 | 1051 | p->cnt++; |
| 1044 | 1052 | if( azArg==0 ) break; |
| 1045 | 1053 | utf8_printf(p->out,"INSERT INTO %s",p->zDestTable); |
| 1046 | 1054 | if( p->showHeader ){ |
| 1047 | | - fprintf(p->out,"("); |
| 1055 | + raw_printf(p->out,"("); |
| 1048 | 1056 | for(i=0; i<nArg; i++){ |
| 1049 | 1057 | char *zSep = i>0 ? ",": ""; |
| 1050 | 1058 | utf8_printf(p->out, "%s%s", zSep, azCol[i]); |
| 1051 | 1059 | } |
| 1052 | | - fprintf(p->out,")"); |
| 1060 | + raw_printf(p->out,")"); |
| 1053 | 1061 | } |
| 1054 | | - fprintf(p->out," VALUES("); |
| 1062 | + raw_printf(p->out," VALUES("); |
| 1055 | 1063 | for(i=0; i<nArg; i++){ |
| 1056 | 1064 | char *zSep = i>0 ? ",": ""; |
| 1057 | 1065 | if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){ |
| 1058 | | - fprintf(p->out,"%sNULL",zSep); |
| 1066 | + utf8_printf(p->out,"%sNULL",zSep); |
| 1059 | 1067 | }else if( aiType && aiType[i]==SQLITE_TEXT ){ |
| 1060 | | - if( zSep[0] ) fprintf(p->out,"%s",zSep); |
| 1068 | + if( zSep[0] ) utf8_printf(p->out,"%s",zSep); |
| 1061 | 1069 | output_quoted_string(p->out, azArg[i]); |
| 1062 | 1070 | }else if( aiType && (aiType[i]==SQLITE_INTEGER |
| 1063 | 1071 | || aiType[i]==SQLITE_FLOAT) ){ |
| 1064 | 1072 | utf8_printf(p->out,"%s%s",zSep, azArg[i]); |
| 1065 | 1073 | }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){ |
| 1066 | 1074 | const void *pBlob = sqlite3_column_blob(p->pStmt, i); |
| 1067 | 1075 | int nBlob = sqlite3_column_bytes(p->pStmt, i); |
| 1068 | | - if( zSep[0] ) fprintf(p->out,"%s",zSep); |
| 1076 | + if( zSep[0] ) utf8_printf(p->out,"%s",zSep); |
| 1069 | 1077 | output_hex_blob(p->out, pBlob, nBlob); |
| 1070 | 1078 | }else if( isNumber(azArg[i], 0) ){ |
| 1071 | 1079 | utf8_printf(p->out,"%s%s",zSep, azArg[i]); |
| 1072 | 1080 | }else{ |
| 1073 | | - if( zSep[0] ) fprintf(p->out,"%s",zSep); |
| 1081 | + if( zSep[0] ) utf8_printf(p->out,"%s",zSep); |
| 1074 | 1082 | output_quoted_string(p->out, azArg[i]); |
| 1075 | 1083 | } |
| 1076 | 1084 | } |
| 1077 | | - fprintf(p->out,");\n"); |
| 1085 | + raw_printf(p->out,");\n"); |
| 1078 | 1086 | break; |
| 1079 | 1087 | } |
| 1080 | 1088 | case MODE_Ascii: { |
| 1081 | 1089 | if( p->cnt++==0 && p->showHeader ){ |
| 1082 | 1090 | for(i=0; i<nArg; i++){ |
| | @@ -1129,11 +1137,11 @@ |
| 1129 | 1137 | } |
| 1130 | 1138 | } |
| 1131 | 1139 | if( needQuote ) n += 2; |
| 1132 | 1140 | z = p->zDestTable = malloc( n+1 ); |
| 1133 | 1141 | if( z==0 ){ |
| 1134 | | - fprintf(stderr,"Error: out of memory\n"); |
| 1142 | + raw_printf(stderr,"Error: out of memory\n"); |
| 1135 | 1143 | exit(1); |
| 1136 | 1144 | } |
| 1137 | 1145 | n = 0; |
| 1138 | 1146 | if( needQuote ) z[n++] = '\''; |
| 1139 | 1147 | for(i=0; zName[i]; i++){ |
| | @@ -1210,11 +1218,12 @@ |
| 1210 | 1218 | int nResult; |
| 1211 | 1219 | int i; |
| 1212 | 1220 | const char *z; |
| 1213 | 1221 | rc = sqlite3_prepare_v2(p->db, zSelect, -1, &pSelect, 0); |
| 1214 | 1222 | if( rc!=SQLITE_OK || !pSelect ){ |
| 1215 | | - fprintf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db)); |
| 1223 | + utf8_printf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, |
| 1224 | + sqlite3_errmsg(p->db)); |
| 1216 | 1225 | if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++; |
| 1217 | 1226 | return rc; |
| 1218 | 1227 | } |
| 1219 | 1228 | rc = sqlite3_step(pSelect); |
| 1220 | 1229 | nResult = sqlite3_column_count(pSelect); |
| | @@ -1229,19 +1238,20 @@ |
| 1229 | 1238 | utf8_printf(p->out, ",%s", sqlite3_column_text(pSelect, i)); |
| 1230 | 1239 | } |
| 1231 | 1240 | if( z==0 ) z = ""; |
| 1232 | 1241 | while( z[0] && (z[0]!='-' || z[1]!='-') ) z++; |
| 1233 | 1242 | if( z[0] ){ |
| 1234 | | - fprintf(p->out, "\n;\n"); |
| 1243 | + raw_printf(p->out, "\n;\n"); |
| 1235 | 1244 | }else{ |
| 1236 | | - fprintf(p->out, ";\n"); |
| 1245 | + raw_printf(p->out, ";\n"); |
| 1237 | 1246 | } |
| 1238 | 1247 | rc = sqlite3_step(pSelect); |
| 1239 | 1248 | } |
| 1240 | 1249 | rc = sqlite3_finalize(pSelect); |
| 1241 | 1250 | if( rc!=SQLITE_OK ){ |
| 1242 | | - fprintf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db)); |
| 1251 | + utf8_printf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, |
| 1252 | + sqlite3_errmsg(p->db)); |
| 1243 | 1253 | if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++; |
| 1244 | 1254 | } |
| 1245 | 1255 | return rc; |
| 1246 | 1256 | } |
| 1247 | 1257 | |
| | @@ -1272,107 +1282,115 @@ |
| 1272 | 1282 | |
| 1273 | 1283 | if( pArg && pArg->out ){ |
| 1274 | 1284 | |
| 1275 | 1285 | iHiwtr = iCur = -1; |
| 1276 | 1286 | sqlite3_status(SQLITE_STATUS_MEMORY_USED, &iCur, &iHiwtr, bReset); |
| 1277 | | - fprintf(pArg->out, |
| 1287 | + raw_printf(pArg->out, |
| 1278 | 1288 | "Memory Used: %d (max %d) bytes\n", |
| 1279 | 1289 | iCur, iHiwtr); |
| 1280 | 1290 | iHiwtr = iCur = -1; |
| 1281 | 1291 | sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, &iCur, &iHiwtr, bReset); |
| 1282 | | - fprintf(pArg->out, "Number of Outstanding Allocations: %d (max %d)\n", |
| 1292 | + raw_printf(pArg->out, "Number of Outstanding Allocations: %d (max %d)\n", |
| 1283 | 1293 | iCur, iHiwtr); |
| 1284 | 1294 | if( pArg->shellFlgs & SHFLG_Pagecache ){ |
| 1285 | 1295 | iHiwtr = iCur = -1; |
| 1286 | 1296 | sqlite3_status(SQLITE_STATUS_PAGECACHE_USED, &iCur, &iHiwtr, bReset); |
| 1287 | | - fprintf(pArg->out, |
| 1297 | + raw_printf(pArg->out, |
| 1288 | 1298 | "Number of Pcache Pages Used: %d (max %d) pages\n", |
| 1289 | 1299 | iCur, iHiwtr); |
| 1290 | 1300 | } |
| 1291 | 1301 | iHiwtr = iCur = -1; |
| 1292 | 1302 | sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &iCur, &iHiwtr, bReset); |
| 1293 | | - fprintf(pArg->out, |
| 1303 | + raw_printf(pArg->out, |
| 1294 | 1304 | "Number of Pcache Overflow Bytes: %d (max %d) bytes\n", |
| 1295 | 1305 | iCur, iHiwtr); |
| 1296 | 1306 | if( pArg->shellFlgs & SHFLG_Scratch ){ |
| 1297 | 1307 | iHiwtr = iCur = -1; |
| 1298 | 1308 | sqlite3_status(SQLITE_STATUS_SCRATCH_USED, &iCur, &iHiwtr, bReset); |
| 1299 | | - fprintf(pArg->out, "Number of Scratch Allocations Used: %d (max %d)\n", |
| 1309 | + raw_printf(pArg->out, |
| 1310 | + "Number of Scratch Allocations Used: %d (max %d)\n", |
| 1300 | 1311 | iCur, iHiwtr); |
| 1301 | 1312 | } |
| 1302 | 1313 | iHiwtr = iCur = -1; |
| 1303 | 1314 | sqlite3_status(SQLITE_STATUS_SCRATCH_OVERFLOW, &iCur, &iHiwtr, bReset); |
| 1304 | | - fprintf(pArg->out, |
| 1315 | + raw_printf(pArg->out, |
| 1305 | 1316 | "Number of Scratch Overflow Bytes: %d (max %d) bytes\n", |
| 1306 | 1317 | iCur, iHiwtr); |
| 1307 | 1318 | iHiwtr = iCur = -1; |
| 1308 | 1319 | sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &iCur, &iHiwtr, bReset); |
| 1309 | | - fprintf(pArg->out, "Largest Allocation: %d bytes\n", |
| 1320 | + raw_printf(pArg->out, "Largest Allocation: %d bytes\n", |
| 1310 | 1321 | iHiwtr); |
| 1311 | 1322 | iHiwtr = iCur = -1; |
| 1312 | 1323 | sqlite3_status(SQLITE_STATUS_PAGECACHE_SIZE, &iCur, &iHiwtr, bReset); |
| 1313 | | - fprintf(pArg->out, "Largest Pcache Allocation: %d bytes\n", |
| 1324 | + raw_printf(pArg->out, "Largest Pcache Allocation: %d bytes\n", |
| 1314 | 1325 | iHiwtr); |
| 1315 | 1326 | iHiwtr = iCur = -1; |
| 1316 | 1327 | sqlite3_status(SQLITE_STATUS_SCRATCH_SIZE, &iCur, &iHiwtr, bReset); |
| 1317 | | - fprintf(pArg->out, "Largest Scratch Allocation: %d bytes\n", |
| 1328 | + raw_printf(pArg->out, "Largest Scratch Allocation: %d bytes\n", |
| 1318 | 1329 | iHiwtr); |
| 1319 | 1330 | #ifdef YYTRACKMAXSTACKDEPTH |
| 1320 | 1331 | iHiwtr = iCur = -1; |
| 1321 | 1332 | sqlite3_status(SQLITE_STATUS_PARSER_STACK, &iCur, &iHiwtr, bReset); |
| 1322 | | - fprintf(pArg->out, "Deepest Parser Stack: %d (max %d)\n", |
| 1333 | + raw_printf(pArg->out, "Deepest Parser Stack: %d (max %d)\n", |
| 1323 | 1334 | iCur, iHiwtr); |
| 1324 | 1335 | #endif |
| 1325 | 1336 | } |
| 1326 | 1337 | |
| 1327 | 1338 | if( pArg && pArg->out && db ){ |
| 1328 | 1339 | if( pArg->shellFlgs & SHFLG_Lookaside ){ |
| 1329 | 1340 | iHiwtr = iCur = -1; |
| 1330 | 1341 | sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, |
| 1331 | 1342 | &iCur, &iHiwtr, bReset); |
| 1332 | | - fprintf(pArg->out, "Lookaside Slots Used: %d (max %d)\n", |
| 1343 | + raw_printf(pArg->out, |
| 1344 | + "Lookaside Slots Used: %d (max %d)\n", |
| 1333 | 1345 | iCur, iHiwtr); |
| 1334 | 1346 | sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT, |
| 1335 | 1347 | &iCur, &iHiwtr, bReset); |
| 1336 | | - fprintf(pArg->out, "Successful lookaside attempts: %d\n", iHiwtr); |
| 1348 | + raw_printf(pArg->out, "Successful lookaside attempts: %d\n", |
| 1349 | + iHiwtr); |
| 1337 | 1350 | sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE, |
| 1338 | 1351 | &iCur, &iHiwtr, bReset); |
| 1339 | | - fprintf(pArg->out, "Lookaside failures due to size: %d\n", iHiwtr); |
| 1352 | + raw_printf(pArg->out, "Lookaside failures due to size: %d\n", |
| 1353 | + iHiwtr); |
| 1340 | 1354 | sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL, |
| 1341 | 1355 | &iCur, &iHiwtr, bReset); |
| 1342 | | - fprintf(pArg->out, "Lookaside failures due to OOM: %d\n", iHiwtr); |
| 1356 | + raw_printf(pArg->out, "Lookaside failures due to OOM: %d\n", |
| 1357 | + iHiwtr); |
| 1343 | 1358 | } |
| 1344 | 1359 | iHiwtr = iCur = -1; |
| 1345 | 1360 | sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset); |
| 1346 | | - fprintf(pArg->out, "Pager Heap Usage: %d bytes\n",iCur); |
| 1361 | + raw_printf(pArg->out, "Pager Heap Usage: %d bytes\n", |
| 1362 | + iCur); |
| 1347 | 1363 | iHiwtr = iCur = -1; |
| 1348 | 1364 | sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_HIT, &iCur, &iHiwtr, 1); |
| 1349 | | - fprintf(pArg->out, "Page cache hits: %d\n", iCur); |
| 1365 | + raw_printf(pArg->out, "Page cache hits: %d\n", iCur); |
| 1350 | 1366 | iHiwtr = iCur = -1; |
| 1351 | 1367 | sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_MISS, &iCur, &iHiwtr, 1); |
| 1352 | | - fprintf(pArg->out, "Page cache misses: %d\n", iCur); |
| 1368 | + raw_printf(pArg->out, "Page cache misses: %d\n", iCur); |
| 1353 | 1369 | iHiwtr = iCur = -1; |
| 1354 | 1370 | sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_WRITE, &iCur, &iHiwtr, 1); |
| 1355 | | - fprintf(pArg->out, "Page cache writes: %d\n", iCur); |
| 1371 | + raw_printf(pArg->out, "Page cache writes: %d\n", iCur); |
| 1356 | 1372 | iHiwtr = iCur = -1; |
| 1357 | 1373 | sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset); |
| 1358 | | - fprintf(pArg->out, "Schema Heap Usage: %d bytes\n",iCur); |
| 1374 | + raw_printf(pArg->out, "Schema Heap Usage: %d bytes\n", |
| 1375 | + iCur); |
| 1359 | 1376 | iHiwtr = iCur = -1; |
| 1360 | 1377 | sqlite3_db_status(db, SQLITE_DBSTATUS_STMT_USED, &iCur, &iHiwtr, bReset); |
| 1361 | | - fprintf(pArg->out, "Statement Heap/Lookaside Usage: %d bytes\n",iCur); |
| 1378 | + raw_printf(pArg->out, "Statement Heap/Lookaside Usage: %d bytes\n", |
| 1379 | + iCur); |
| 1362 | 1380 | } |
| 1363 | 1381 | |
| 1364 | 1382 | if( pArg && pArg->out && db && pArg->pStmt ){ |
| 1365 | 1383 | iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, |
| 1366 | 1384 | bReset); |
| 1367 | | - fprintf(pArg->out, "Fullscan Steps: %d\n", iCur); |
| 1385 | + raw_printf(pArg->out, "Fullscan Steps: %d\n", iCur); |
| 1368 | 1386 | iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_SORT, bReset); |
| 1369 | | - fprintf(pArg->out, "Sort Operations: %d\n", iCur); |
| 1387 | + raw_printf(pArg->out, "Sort Operations: %d\n", iCur); |
| 1370 | 1388 | iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX,bReset); |
| 1371 | | - fprintf(pArg->out, "Autoindex Inserts: %d\n", iCur); |
| 1389 | + raw_printf(pArg->out, "Autoindex Inserts: %d\n", iCur); |
| 1372 | 1390 | iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP, bReset); |
| 1373 | | - fprintf(pArg->out, "Virtual Machine Steps: %d\n", iCur); |
| 1391 | + raw_printf(pArg->out, "Virtual Machine Steps: %d\n", iCur); |
| 1374 | 1392 | } |
| 1375 | 1393 | |
| 1376 | 1394 | /* Do not remove this machine readable comment: extra-stats-output-here */ |
| 1377 | 1395 | |
| 1378 | 1396 | return 0; |
| | @@ -1388,11 +1406,11 @@ |
| 1388 | 1406 | #ifndef SQLITE_ENABLE_STMT_SCANSTATUS |
| 1389 | 1407 | UNUSED_PARAMETER(db); |
| 1390 | 1408 | UNUSED_PARAMETER(pArg); |
| 1391 | 1409 | #else |
| 1392 | 1410 | int i, k, n, mx; |
| 1393 | | - fprintf(pArg->out, "-------- scanstats --------\n"); |
| 1411 | + raw_printf(pArg->out, "-------- scanstats --------\n"); |
| 1394 | 1412 | mx = 0; |
| 1395 | 1413 | for(k=0; k<=mx; k++){ |
| 1396 | 1414 | double rEstLoop = 1.0; |
| 1397 | 1415 | for(i=n=0; 1; i++){ |
| 1398 | 1416 | sqlite3_stmt *p = pArg->pStmt; |
| | @@ -1406,25 +1424,25 @@ |
| 1406 | 1424 | sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_SELECTID, (void*)&iSid); |
| 1407 | 1425 | if( iSid>mx ) mx = iSid; |
| 1408 | 1426 | if( iSid!=k ) continue; |
| 1409 | 1427 | if( n==0 ){ |
| 1410 | 1428 | rEstLoop = (double)nLoop; |
| 1411 | | - if( k>0 ) fprintf(pArg->out, "-------- subquery %d -------\n", k); |
| 1429 | + if( k>0 ) raw_printf(pArg->out, "-------- subquery %d -------\n", k); |
| 1412 | 1430 | } |
| 1413 | 1431 | n++; |
| 1414 | 1432 | sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NVISIT, (void*)&nVisit); |
| 1415 | 1433 | sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EST, (void*)&rEst); |
| 1416 | 1434 | sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EXPLAIN, (void*)&zExplain); |
| 1417 | 1435 | utf8_printf(pArg->out, "Loop %2d: %s\n", n, zExplain); |
| 1418 | 1436 | rEstLoop *= rEst; |
| 1419 | | - fprintf(pArg->out, |
| 1437 | + raw_printf(pArg->out, |
| 1420 | 1438 | " nLoop=%-8lld nRow=%-8lld estRow=%-8lld estRow/Loop=%-8g\n", |
| 1421 | 1439 | nLoop, nVisit, (sqlite3_int64)(rEstLoop+0.5), rEst |
| 1422 | 1440 | ); |
| 1423 | 1441 | } |
| 1424 | 1442 | } |
| 1425 | | - fprintf(pArg->out, "---------------------------\n"); |
| 1443 | + raw_printf(pArg->out, "---------------------------\n"); |
| 1426 | 1444 | #endif |
| 1427 | 1445 | } |
| 1428 | 1446 | |
| 1429 | 1447 | /* |
| 1430 | 1448 | ** Parameter azArray points to a zero-terminated array of strings. zStr |
| | @@ -1584,13 +1602,13 @@ |
| 1584 | 1602 | char *zEQP = sqlite3_mprintf("EXPLAIN QUERY PLAN %s", |
| 1585 | 1603 | sqlite3_sql(pStmt)); |
| 1586 | 1604 | rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0); |
| 1587 | 1605 | if( rc==SQLITE_OK ){ |
| 1588 | 1606 | while( sqlite3_step(pExplain)==SQLITE_ROW ){ |
| 1589 | | - fprintf(pArg->out,"--EQP-- %d,", sqlite3_column_int(pExplain, 0)); |
| 1590 | | - fprintf(pArg->out,"%d,", sqlite3_column_int(pExplain, 1)); |
| 1591 | | - fprintf(pArg->out,"%d,", sqlite3_column_int(pExplain, 2)); |
| 1607 | + raw_printf(pArg->out,"--EQP-- %d,",sqlite3_column_int(pExplain, 0)); |
| 1608 | + raw_printf(pArg->out,"%d,", sqlite3_column_int(pExplain, 1)); |
| 1609 | + raw_printf(pArg->out,"%d,", sqlite3_column_int(pExplain, 2)); |
| 1592 | 1610 | utf8_printf(pArg->out,"%s\n", sqlite3_column_text(pExplain, 3)); |
| 1593 | 1611 | } |
| 1594 | 1612 | } |
| 1595 | 1613 | sqlite3_finalize(pExplain); |
| 1596 | 1614 | sqlite3_free(zEQP); |
| | @@ -1715,17 +1733,17 @@ |
| 1715 | 1733 | zSql = azArg[2]; |
| 1716 | 1734 | |
| 1717 | 1735 | if( strcmp(zTable, "sqlite_sequence")==0 ){ |
| 1718 | 1736 | zPrepStmt = "DELETE FROM sqlite_sequence;\n"; |
| 1719 | 1737 | }else if( sqlite3_strglob("sqlite_stat?", zTable)==0 ){ |
| 1720 | | - fprintf(p->out, "ANALYZE sqlite_master;\n"); |
| 1738 | + raw_printf(p->out, "ANALYZE sqlite_master;\n"); |
| 1721 | 1739 | }else if( strncmp(zTable, "sqlite_", 7)==0 ){ |
| 1722 | 1740 | return 0; |
| 1723 | 1741 | }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){ |
| 1724 | 1742 | char *zIns; |
| 1725 | 1743 | if( !p->writableSchema ){ |
| 1726 | | - fprintf(p->out, "PRAGMA writable_schema=ON;\n"); |
| 1744 | + raw_printf(p->out, "PRAGMA writable_schema=ON;\n"); |
| 1727 | 1745 | p->writableSchema = 1; |
| 1728 | 1746 | } |
| 1729 | 1747 | zIns = sqlite3_mprintf( |
| 1730 | 1748 | "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)" |
| 1731 | 1749 | "VALUES('table','%q','%q',0,'%q');", |
| | @@ -1809,22 +1827,22 @@ |
| 1809 | 1827 | char *zErr = 0; |
| 1810 | 1828 | rc = sqlite3_exec(p->db, zQuery, dump_callback, p, &zErr); |
| 1811 | 1829 | if( rc==SQLITE_CORRUPT ){ |
| 1812 | 1830 | char *zQ2; |
| 1813 | 1831 | int len = strlen30(zQuery); |
| 1814 | | - fprintf(p->out, "/****** CORRUPTION ERROR *******/\n"); |
| 1832 | + raw_printf(p->out, "/****** CORRUPTION ERROR *******/\n"); |
| 1815 | 1833 | if( zErr ){ |
| 1816 | | - fprintf(p->out, "/****** %s ******/\n", zErr); |
| 1834 | + utf8_printf(p->out, "/****** %s ******/\n", zErr); |
| 1817 | 1835 | sqlite3_free(zErr); |
| 1818 | 1836 | zErr = 0; |
| 1819 | 1837 | } |
| 1820 | 1838 | zQ2 = malloc( len+100 ); |
| 1821 | 1839 | if( zQ2==0 ) return rc; |
| 1822 | 1840 | sqlite3_snprintf(len+100, zQ2, "%s ORDER BY rowid DESC", zQuery); |
| 1823 | 1841 | rc = sqlite3_exec(p->db, zQ2, dump_callback, p, &zErr); |
| 1824 | 1842 | if( rc ){ |
| 1825 | | - fprintf(p->out, "/****** ERROR: %s ******/\n", zErr); |
| 1843 | + utf8_printf(p->out, "/****** ERROR: %s ******/\n", zErr); |
| 1826 | 1844 | }else{ |
| 1827 | 1845 | rc = SQLITE_CORRUPT; |
| 1828 | 1846 | } |
| 1829 | 1847 | sqlite3_free(zErr); |
| 1830 | 1848 | free(zQ2); |
| | @@ -1985,11 +2003,11 @@ |
| 1985 | 2003 | if( p->db && sqlite3_errcode(p->db)==SQLITE_OK ){ |
| 1986 | 2004 | sqlite3_create_function(p->db, "shellstatic", 0, SQLITE_UTF8, 0, |
| 1987 | 2005 | shellstaticFunc, 0, 0); |
| 1988 | 2006 | } |
| 1989 | 2007 | if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ |
| 1990 | | - fprintf(stderr,"Error: unable to open database \"%s\": %s\n", |
| 2008 | + utf8_printf(stderr,"Error: unable to open database \"%s\": %s\n", |
| 1991 | 2009 | p->zDbFilename, sqlite3_errmsg(p->db)); |
| 1992 | 2010 | if( keepAlive ) return; |
| 1993 | 2011 | exit(1); |
| 1994 | 2012 | } |
| 1995 | 2013 | #ifndef SQLITE_OMIT_LOAD_EXTENSION |
| | @@ -2135,11 +2153,11 @@ |
| 2135 | 2153 | return 1; |
| 2136 | 2154 | } |
| 2137 | 2155 | if( sqlite3_stricmp(zArg, "off")==0 || sqlite3_stricmp(zArg,"no")==0 ){ |
| 2138 | 2156 | return 0; |
| 2139 | 2157 | } |
| 2140 | | - fprintf(stderr, "ERROR: Not a boolean value: \"%s\". Assuming \"no\".\n", |
| 2158 | + utf8_printf(stderr, "ERROR: Not a boolean value: \"%s\". Assuming \"no\".\n", |
| 2141 | 2159 | zArg); |
| 2142 | 2160 | return 0; |
| 2143 | 2161 | } |
| 2144 | 2162 | |
| 2145 | 2163 | /* |
| | @@ -2163,11 +2181,11 @@ |
| 2163 | 2181 | }else if( strcmp(zFile, "off")==0 ){ |
| 2164 | 2182 | f = 0; |
| 2165 | 2183 | }else{ |
| 2166 | 2184 | f = fopen(zFile, "wb"); |
| 2167 | 2185 | if( f==0 ){ |
| 2168 | | - fprintf(stderr, "Error: cannot open \"%s\"\n", zFile); |
| 2186 | + utf8_printf(stderr, "Error: cannot open \"%s\"\n", zFile); |
| 2169 | 2187 | } |
| 2170 | 2188 | } |
| 2171 | 2189 | return f; |
| 2172 | 2190 | } |
| 2173 | 2191 | |
| | @@ -2212,11 +2230,11 @@ |
| 2212 | 2230 | static void import_append_char(ImportCtx *p, int c){ |
| 2213 | 2231 | if( p->n+1>=p->nAlloc ){ |
| 2214 | 2232 | p->nAlloc += p->nAlloc + 100; |
| 2215 | 2233 | p->z = sqlite3_realloc64(p->z, p->nAlloc); |
| 2216 | 2234 | if( p->z==0 ){ |
| 2217 | | - fprintf(stderr, "out of memory\n"); |
| 2235 | + raw_printf(stderr, "out of memory\n"); |
| 2218 | 2236 | exit(1); |
| 2219 | 2237 | } |
| 2220 | 2238 | } |
| 2221 | 2239 | p->z[p->n++] = (char)c; |
| 2222 | 2240 | } |
| | @@ -2266,15 +2284,15 @@ |
| 2266 | 2284 | do{ p->n--; }while( p->z[p->n]!=cQuote ); |
| 2267 | 2285 | p->cTerm = c; |
| 2268 | 2286 | break; |
| 2269 | 2287 | } |
| 2270 | 2288 | if( pc==cQuote && c!='\r' ){ |
| 2271 | | - fprintf(stderr, "%s:%d: unescaped %c character\n", |
| 2289 | + utf8_printf(stderr, "%s:%d: unescaped %c character\n", |
| 2272 | 2290 | p->zFile, p->nLine, cQuote); |
| 2273 | 2291 | } |
| 2274 | 2292 | if( c==EOF ){ |
| 2275 | | - fprintf(stderr, "%s:%d: unterminated %c-quoted field\n", |
| 2293 | + utf8_printf(stderr, "%s:%d: unterminated %c-quoted field\n", |
| 2276 | 2294 | p->zFile, startLine, cQuote); |
| 2277 | 2295 | p->cTerm = c; |
| 2278 | 2296 | break; |
| 2279 | 2297 | } |
| 2280 | 2298 | import_append_char(p, c); |
| | @@ -2352,19 +2370,19 @@ |
| 2352 | 2370 | const int spinRate = 10000; |
| 2353 | 2371 | |
| 2354 | 2372 | zQuery = sqlite3_mprintf("SELECT * FROM \"%w\"", zTable); |
| 2355 | 2373 | rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); |
| 2356 | 2374 | if( rc ){ |
| 2357 | | - fprintf(stderr, "Error %d: %s on [%s]\n", |
| 2375 | + utf8_printf(stderr, "Error %d: %s on [%s]\n", |
| 2358 | 2376 | sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), |
| 2359 | 2377 | zQuery); |
| 2360 | 2378 | goto end_data_xfer; |
| 2361 | 2379 | } |
| 2362 | 2380 | n = sqlite3_column_count(pQuery); |
| 2363 | 2381 | zInsert = sqlite3_malloc64(200 + nTable + n*3); |
| 2364 | 2382 | if( zInsert==0 ){ |
| 2365 | | - fprintf(stderr, "out of memory\n"); |
| 2383 | + raw_printf(stderr, "out of memory\n"); |
| 2366 | 2384 | goto end_data_xfer; |
| 2367 | 2385 | } |
| 2368 | 2386 | sqlite3_snprintf(200+nTable,zInsert, |
| 2369 | 2387 | "INSERT OR IGNORE INTO \"%s\" VALUES(?", zTable); |
| 2370 | 2388 | i = (int)strlen(zInsert); |
| | @@ -2373,11 +2391,11 @@ |
| 2373 | 2391 | i += 2; |
| 2374 | 2392 | } |
| 2375 | 2393 | memcpy(zInsert+i, ");", 3); |
| 2376 | 2394 | rc = sqlite3_prepare_v2(newDb, zInsert, -1, &pInsert, 0); |
| 2377 | 2395 | if( rc ){ |
| 2378 | | - fprintf(stderr, "Error %d: %s on [%s]\n", |
| 2396 | + utf8_printf(stderr, "Error %d: %s on [%s]\n", |
| 2379 | 2397 | sqlite3_extended_errcode(newDb), sqlite3_errmsg(newDb), |
| 2380 | 2398 | zQuery); |
| 2381 | 2399 | goto end_data_xfer; |
| 2382 | 2400 | } |
| 2383 | 2401 | for(k=0; k<2; k++){ |
| | @@ -2410,11 +2428,11 @@ |
| 2410 | 2428 | } |
| 2411 | 2429 | } |
| 2412 | 2430 | } /* End for */ |
| 2413 | 2431 | rc = sqlite3_step(pInsert); |
| 2414 | 2432 | if( rc!=SQLITE_OK && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ |
| 2415 | | - fprintf(stderr, "Error %d: %s\n", sqlite3_extended_errcode(newDb), |
| 2433 | + utf8_printf(stderr, "Error %d: %s\n", sqlite3_extended_errcode(newDb), |
| 2416 | 2434 | sqlite3_errmsg(newDb)); |
| 2417 | 2435 | } |
| 2418 | 2436 | sqlite3_reset(pInsert); |
| 2419 | 2437 | cnt++; |
| 2420 | 2438 | if( (cnt%spinRate)==0 ){ |
| | @@ -2427,11 +2445,11 @@ |
| 2427 | 2445 | sqlite3_free(zQuery); |
| 2428 | 2446 | zQuery = sqlite3_mprintf("SELECT * FROM \"%w\" ORDER BY rowid DESC;", |
| 2429 | 2447 | zTable); |
| 2430 | 2448 | rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); |
| 2431 | 2449 | if( rc ){ |
| 2432 | | - fprintf(stderr, "Warning: cannot step \"%s\" backwards", zTable); |
| 2450 | + utf8_printf(stderr, "Warning: cannot step \"%s\" backwards", zTable); |
| 2433 | 2451 | break; |
| 2434 | 2452 | } |
| 2435 | 2453 | } /* End for(k=0...) */ |
| 2436 | 2454 | |
| 2437 | 2455 | end_data_xfer: |
| | @@ -2463,11 +2481,11 @@ |
| 2463 | 2481 | |
| 2464 | 2482 | zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_master" |
| 2465 | 2483 | " WHERE %s", zWhere); |
| 2466 | 2484 | rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); |
| 2467 | 2485 | if( rc ){ |
| 2468 | | - fprintf(stderr, "Error: (%d) %s on [%s]\n", |
| 2486 | + utf8_printf(stderr, "Error: (%d) %s on [%s]\n", |
| 2469 | 2487 | sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), |
| 2470 | 2488 | zQuery); |
| 2471 | 2489 | goto end_schema_xfer; |
| 2472 | 2490 | } |
| 2473 | 2491 | while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){ |
| | @@ -2474,11 +2492,11 @@ |
| 2474 | 2492 | zName = sqlite3_column_text(pQuery, 0); |
| 2475 | 2493 | zSql = sqlite3_column_text(pQuery, 1); |
| 2476 | 2494 | printf("%s... ", zName); fflush(stdout); |
| 2477 | 2495 | sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); |
| 2478 | 2496 | if( zErrMsg ){ |
| 2479 | | - fprintf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); |
| 2497 | + utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); |
| 2480 | 2498 | sqlite3_free(zErrMsg); |
| 2481 | 2499 | zErrMsg = 0; |
| 2482 | 2500 | } |
| 2483 | 2501 | if( xForEach ){ |
| 2484 | 2502 | xForEach(p, newDb, (const char*)zName); |
| | @@ -2490,11 +2508,11 @@ |
| 2490 | 2508 | sqlite3_free(zQuery); |
| 2491 | 2509 | zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_master" |
| 2492 | 2510 | " WHERE %s ORDER BY rowid DESC", zWhere); |
| 2493 | 2511 | rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); |
| 2494 | 2512 | if( rc ){ |
| 2495 | | - fprintf(stderr, "Error: (%d) %s on [%s]\n", |
| 2513 | + utf8_printf(stderr, "Error: (%d) %s on [%s]\n", |
| 2496 | 2514 | sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), |
| 2497 | 2515 | zQuery); |
| 2498 | 2516 | goto end_schema_xfer; |
| 2499 | 2517 | } |
| 2500 | 2518 | while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){ |
| | @@ -2501,11 +2519,11 @@ |
| 2501 | 2519 | zName = sqlite3_column_text(pQuery, 0); |
| 2502 | 2520 | zSql = sqlite3_column_text(pQuery, 1); |
| 2503 | 2521 | printf("%s... ", zName); fflush(stdout); |
| 2504 | 2522 | sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); |
| 2505 | 2523 | if( zErrMsg ){ |
| 2506 | | - fprintf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); |
| 2524 | + utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); |
| 2507 | 2525 | sqlite3_free(zErrMsg); |
| 2508 | 2526 | zErrMsg = 0; |
| 2509 | 2527 | } |
| 2510 | 2528 | if( xForEach ){ |
| 2511 | 2529 | xForEach(p, newDb, (const char*)zName); |
| | @@ -2525,16 +2543,16 @@ |
| 2525 | 2543 | */ |
| 2526 | 2544 | static void tryToClone(ShellState *p, const char *zNewDb){ |
| 2527 | 2545 | int rc; |
| 2528 | 2546 | sqlite3 *newDb = 0; |
| 2529 | 2547 | if( access(zNewDb,0)==0 ){ |
| 2530 | | - fprintf(stderr, "File \"%s\" already exists.\n", zNewDb); |
| 2548 | + utf8_printf(stderr, "File \"%s\" already exists.\n", zNewDb); |
| 2531 | 2549 | return; |
| 2532 | 2550 | } |
| 2533 | 2551 | rc = sqlite3_open(zNewDb, &newDb); |
| 2534 | 2552 | if( rc ){ |
| 2535 | | - fprintf(stderr, "Cannot create output database: %s\n", |
| 2553 | + utf8_printf(stderr, "Cannot create output database: %s\n", |
| 2536 | 2554 | sqlite3_errmsg(newDb)); |
| 2537 | 2555 | }else{ |
| 2538 | 2556 | sqlite3_exec(p->db, "PRAGMA writable_schema=ON;", 0, 0, 0); |
| 2539 | 2557 | sqlite3_exec(newDb, "BEGIN EXCLUSIVE;", 0, 0, 0); |
| 2540 | 2558 | tryToCloneSchema(p, newDb, "type='table'", tryToCloneData); |
| | @@ -2627,31 +2645,31 @@ |
| 2627 | 2645 | if( pFile==0 || pFile->pMethods==0 || pFile->pMethods->xRead==0 ){ |
| 2628 | 2646 | return 1; |
| 2629 | 2647 | } |
| 2630 | 2648 | i = pFile->pMethods->xRead(pFile, aHdr, 100, 0); |
| 2631 | 2649 | if( i!=SQLITE_OK ){ |
| 2632 | | - fprintf(stderr, "unable to read database header\n"); |
| 2650 | + raw_printf(stderr, "unable to read database header\n"); |
| 2633 | 2651 | return 1; |
| 2634 | 2652 | } |
| 2635 | 2653 | i = get2byteInt(aHdr+16); |
| 2636 | 2654 | if( i==1 ) i = 65536; |
| 2637 | | - fprintf(p->out, "%-20s %d\n", "database page size:", i); |
| 2638 | | - fprintf(p->out, "%-20s %d\n", "write format:", aHdr[18]); |
| 2639 | | - fprintf(p->out, "%-20s %d\n", "read format:", aHdr[19]); |
| 2640 | | - fprintf(p->out, "%-20s %d\n", "reserved bytes:", aHdr[20]); |
| 2655 | + utf8_printf(p->out, "%-20s %d\n", "database page size:", i); |
| 2656 | + utf8_printf(p->out, "%-20s %d\n", "write format:", aHdr[18]); |
| 2657 | + utf8_printf(p->out, "%-20s %d\n", "read format:", aHdr[19]); |
| 2658 | + utf8_printf(p->out, "%-20s %d\n", "reserved bytes:", aHdr[20]); |
| 2641 | 2659 | for(i=0; i<ArraySize(aField); i++){ |
| 2642 | 2660 | int ofst = aField[i].ofst; |
| 2643 | 2661 | unsigned int val = get4byteInt(aHdr + ofst); |
| 2644 | | - fprintf(p->out, "%-20s %u", aField[i].zName, val); |
| 2662 | + utf8_printf(p->out, "%-20s %u", aField[i].zName, val); |
| 2645 | 2663 | switch( ofst ){ |
| 2646 | 2664 | case 56: { |
| 2647 | | - if( val==1 ) fprintf(p->out, " (utf8)"); |
| 2648 | | - if( val==2 ) fprintf(p->out, " (utf16le)"); |
| 2649 | | - if( val==3 ) fprintf(p->out, " (utf16be)"); |
| 2665 | + if( val==1 ) raw_printf(p->out, " (utf8)"); |
| 2666 | + if( val==2 ) raw_printf(p->out, " (utf16le)"); |
| 2667 | + if( val==3 ) raw_printf(p->out, " (utf16be)"); |
| 2650 | 2668 | } |
| 2651 | 2669 | } |
| 2652 | | - fprintf(p->out, "\n"); |
| 2670 | + raw_printf(p->out, "\n"); |
| 2653 | 2671 | } |
| 2654 | 2672 | if( zDb==0 ){ |
| 2655 | 2673 | zSchemaTab = sqlite3_mprintf("main.sqlite_master"); |
| 2656 | 2674 | }else if( strcmp(zDb,"temp")==0 ){ |
| 2657 | 2675 | zSchemaTab = sqlite3_mprintf("%s", "sqlite_temp_master"); |
| | @@ -2671,19 +2689,19 @@ |
| 2671 | 2689 | /* |
| 2672 | 2690 | ** Print the current sqlite3_errmsg() value to stderr and return 1. |
| 2673 | 2691 | */ |
| 2674 | 2692 | static int shellDatabaseError(sqlite3 *db){ |
| 2675 | 2693 | const char *zErr = sqlite3_errmsg(db); |
| 2676 | | - fprintf(stderr, "Error: %s\n", zErr); |
| 2694 | + utf8_printf(stderr, "Error: %s\n", zErr); |
| 2677 | 2695 | return 1; |
| 2678 | 2696 | } |
| 2679 | 2697 | |
| 2680 | 2698 | /* |
| 2681 | 2699 | ** Print an out-of-memory message to stderr and return 1. |
| 2682 | 2700 | */ |
| 2683 | 2701 | static int shellNomemError(void){ |
| 2684 | | - fprintf(stderr, "Error: out of memory\n"); |
| 2702 | + raw_printf(stderr, "Error: out of memory\n"); |
| 2685 | 2703 | return 1; |
| 2686 | 2704 | } |
| 2687 | 2705 | |
| 2688 | 2706 | /* |
| 2689 | 2707 | ** If an input line begins with "." then invoke this routine to |
| | @@ -2739,57 +2757,57 @@ |
| 2739 | 2757 | const char *z = azArg[j]; |
| 2740 | 2758 | if( z[0]=='-' ){ |
| 2741 | 2759 | while( z[0]=='-' ) z++; |
| 2742 | 2760 | /* No options to process at this time */ |
| 2743 | 2761 | { |
| 2744 | | - fprintf(stderr, "unknown option: %s\n", azArg[j]); |
| 2762 | + utf8_printf(stderr, "unknown option: %s\n", azArg[j]); |
| 2745 | 2763 | return 1; |
| 2746 | 2764 | } |
| 2747 | 2765 | }else if( zDestFile==0 ){ |
| 2748 | 2766 | zDestFile = azArg[j]; |
| 2749 | 2767 | }else if( zDb==0 ){ |
| 2750 | 2768 | zDb = zDestFile; |
| 2751 | 2769 | zDestFile = azArg[j]; |
| 2752 | 2770 | }else{ |
| 2753 | | - fprintf(stderr, "too many arguments to .backup\n"); |
| 2771 | + raw_printf(stderr, "too many arguments to .backup\n"); |
| 2754 | 2772 | return 1; |
| 2755 | 2773 | } |
| 2756 | 2774 | } |
| 2757 | 2775 | if( zDestFile==0 ){ |
| 2758 | | - fprintf(stderr, "missing FILENAME argument on .backup\n"); |
| 2776 | + raw_printf(stderr, "missing FILENAME argument on .backup\n"); |
| 2759 | 2777 | return 1; |
| 2760 | 2778 | } |
| 2761 | 2779 | if( zDb==0 ) zDb = "main"; |
| 2762 | 2780 | rc = sqlite3_open(zDestFile, &pDest); |
| 2763 | 2781 | if( rc!=SQLITE_OK ){ |
| 2764 | | - fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile); |
| 2782 | + utf8_printf(stderr, "Error: cannot open \"%s\"\n", zDestFile); |
| 2765 | 2783 | sqlite3_close(pDest); |
| 2766 | 2784 | return 1; |
| 2767 | 2785 | } |
| 2768 | 2786 | open_db(p, 0); |
| 2769 | 2787 | pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb); |
| 2770 | 2788 | if( pBackup==0 ){ |
| 2771 | | - fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); |
| 2789 | + utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); |
| 2772 | 2790 | sqlite3_close(pDest); |
| 2773 | 2791 | return 1; |
| 2774 | 2792 | } |
| 2775 | 2793 | while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){} |
| 2776 | 2794 | sqlite3_backup_finish(pBackup); |
| 2777 | 2795 | if( rc==SQLITE_DONE ){ |
| 2778 | 2796 | rc = 0; |
| 2779 | 2797 | }else{ |
| 2780 | | - fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); |
| 2798 | + utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); |
| 2781 | 2799 | rc = 1; |
| 2782 | 2800 | } |
| 2783 | 2801 | sqlite3_close(pDest); |
| 2784 | 2802 | }else |
| 2785 | 2803 | |
| 2786 | 2804 | if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){ |
| 2787 | 2805 | if( nArg==2 ){ |
| 2788 | 2806 | bail_on_error = booleanValue(azArg[1]); |
| 2789 | 2807 | }else{ |
| 2790 | | - fprintf(stderr, "Usage: .bail on|off\n"); |
| 2808 | + raw_printf(stderr, "Usage: .bail on|off\n"); |
| 2791 | 2809 | rc = 1; |
| 2792 | 2810 | } |
| 2793 | 2811 | }else |
| 2794 | 2812 | |
| 2795 | 2813 | if( c=='b' && n>=3 && strncmp(azArg[0], "binary", n)==0 ){ |
| | @@ -2798,11 +2816,11 @@ |
| 2798 | 2816 | setBinaryMode(p->out); |
| 2799 | 2817 | }else{ |
| 2800 | 2818 | setTextMode(p->out); |
| 2801 | 2819 | } |
| 2802 | 2820 | }else{ |
| 2803 | | - fprintf(stderr, "Usage: .binary on|off\n"); |
| 2821 | + raw_printf(stderr, "Usage: .binary on|off\n"); |
| 2804 | 2822 | rc = 1; |
| 2805 | 2823 | } |
| 2806 | 2824 | }else |
| 2807 | 2825 | |
| 2808 | 2826 | /* The undocumented ".breakpoint" command causes a call to the no-op |
| | @@ -2814,20 +2832,20 @@ |
| 2814 | 2832 | |
| 2815 | 2833 | if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){ |
| 2816 | 2834 | if( nArg==2 ){ |
| 2817 | 2835 | p->countChanges = booleanValue(azArg[1]); |
| 2818 | 2836 | }else{ |
| 2819 | | - fprintf(stderr, "Usage: .changes on|off\n"); |
| 2837 | + raw_printf(stderr, "Usage: .changes on|off\n"); |
| 2820 | 2838 | rc = 1; |
| 2821 | 2839 | } |
| 2822 | 2840 | }else |
| 2823 | 2841 | |
| 2824 | 2842 | if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){ |
| 2825 | 2843 | if( nArg==2 ){ |
| 2826 | 2844 | tryToClone(p, azArg[1]); |
| 2827 | 2845 | }else{ |
| 2828 | | - fprintf(stderr, "Usage: .clone FILENAME\n"); |
| 2846 | + raw_printf(stderr, "Usage: .clone FILENAME\n"); |
| 2829 | 2847 | rc = 1; |
| 2830 | 2848 | } |
| 2831 | 2849 | }else |
| 2832 | 2850 | |
| 2833 | 2851 | if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 ){ |
| | @@ -2841,11 +2859,11 @@ |
| 2841 | 2859 | data.colWidth[1] = 15; |
| 2842 | 2860 | data.colWidth[2] = 58; |
| 2843 | 2861 | data.cnt = 0; |
| 2844 | 2862 | sqlite3_exec(p->db, "PRAGMA database_list; ", callback, &data, &zErrMsg); |
| 2845 | 2863 | if( zErrMsg ){ |
| 2846 | | - fprintf(stderr,"Error: %s\n", zErrMsg); |
| 2864 | + utf8_printf(stderr,"Error: %s\n", zErrMsg); |
| 2847 | 2865 | sqlite3_free(zErrMsg); |
| 2848 | 2866 | rc = 1; |
| 2849 | 2867 | } |
| 2850 | 2868 | }else |
| 2851 | 2869 | |
| | @@ -2857,16 +2875,16 @@ |
| 2857 | 2875 | open_db(p, 0); |
| 2858 | 2876 | /* When playing back a "dump", the content might appear in an order |
| 2859 | 2877 | ** which causes immediate foreign key constraints to be violated. |
| 2860 | 2878 | ** So disable foreign-key constraint enforcement to prevent problems. */ |
| 2861 | 2879 | if( nArg!=1 && nArg!=2 ){ |
| 2862 | | - fprintf(stderr, "Usage: .dump ?LIKE-PATTERN?\n"); |
| 2880 | + raw_printf(stderr, "Usage: .dump ?LIKE-PATTERN?\n"); |
| 2863 | 2881 | rc = 1; |
| 2864 | 2882 | goto meta_command_exit; |
| 2865 | 2883 | } |
| 2866 | | - fprintf(p->out, "PRAGMA foreign_keys=OFF;\n"); |
| 2867 | | - fprintf(p->out, "BEGIN TRANSACTION;\n"); |
| 2884 | + raw_printf(p->out, "PRAGMA foreign_keys=OFF;\n"); |
| 2885 | + raw_printf(p->out, "BEGIN TRANSACTION;\n"); |
| 2868 | 2886 | p->writableSchema = 0; |
| 2869 | 2887 | sqlite3_exec(p->db, "SAVEPOINT dump; PRAGMA writable_schema=ON", 0, 0, 0); |
| 2870 | 2888 | p->nErr = 0; |
| 2871 | 2889 | if( nArg==1 ){ |
| 2872 | 2890 | run_schema_dump_query(p, |
| | @@ -2897,32 +2915,32 @@ |
| 2897 | 2915 | ); |
| 2898 | 2916 | zShellStatic = 0; |
| 2899 | 2917 | } |
| 2900 | 2918 | } |
| 2901 | 2919 | if( p->writableSchema ){ |
| 2902 | | - fprintf(p->out, "PRAGMA writable_schema=OFF;\n"); |
| 2920 | + raw_printf(p->out, "PRAGMA writable_schema=OFF;\n"); |
| 2903 | 2921 | p->writableSchema = 0; |
| 2904 | 2922 | } |
| 2905 | 2923 | sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0); |
| 2906 | 2924 | sqlite3_exec(p->db, "RELEASE dump;", 0, 0, 0); |
| 2907 | | - fprintf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n"); |
| 2925 | + raw_printf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n"); |
| 2908 | 2926 | }else |
| 2909 | 2927 | |
| 2910 | 2928 | if( c=='e' && strncmp(azArg[0], "echo", n)==0 ){ |
| 2911 | 2929 | if( nArg==2 ){ |
| 2912 | 2930 | p->echoOn = booleanValue(azArg[1]); |
| 2913 | 2931 | }else{ |
| 2914 | | - fprintf(stderr, "Usage: .echo on|off\n"); |
| 2932 | + raw_printf(stderr, "Usage: .echo on|off\n"); |
| 2915 | 2933 | rc = 1; |
| 2916 | 2934 | } |
| 2917 | 2935 | }else |
| 2918 | 2936 | |
| 2919 | 2937 | if( c=='e' && strncmp(azArg[0], "eqp", n)==0 ){ |
| 2920 | 2938 | if( nArg==2 ){ |
| 2921 | 2939 | p->autoEQP = booleanValue(azArg[1]); |
| 2922 | 2940 | }else{ |
| 2923 | | - fprintf(stderr, "Usage: .eqp on|off\n"); |
| 2941 | + raw_printf(stderr, "Usage: .eqp on|off\n"); |
| 2924 | 2942 | rc = 1; |
| 2925 | 2943 | } |
| 2926 | 2944 | }else |
| 2927 | 2945 | |
| 2928 | 2946 | if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){ |
| | @@ -2968,11 +2986,11 @@ |
| 2968 | 2986 | if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){ |
| 2969 | 2987 | ShellState data; |
| 2970 | 2988 | char *zErrMsg = 0; |
| 2971 | 2989 | int doStats = 0; |
| 2972 | 2990 | if( nArg!=1 ){ |
| 2973 | | - fprintf(stderr, "Usage: .fullschema\n"); |
| 2991 | + raw_printf(stderr, "Usage: .fullschema\n"); |
| 2974 | 2992 | rc = 1; |
| 2975 | 2993 | goto meta_command_exit; |
| 2976 | 2994 | } |
| 2977 | 2995 | open_db(p, 0); |
| 2978 | 2996 | memcpy(&data, p, sizeof(data)); |
| | @@ -2995,13 +3013,13 @@ |
| 2995 | 3013 | -1, &pStmt, 0); |
| 2996 | 3014 | doStats = sqlite3_step(pStmt)==SQLITE_ROW; |
| 2997 | 3015 | sqlite3_finalize(pStmt); |
| 2998 | 3016 | } |
| 2999 | 3017 | if( doStats==0 ){ |
| 3000 | | - fprintf(p->out, "/* No STAT tables available */\n"); |
| 3018 | + raw_printf(p->out, "/* No STAT tables available */\n"); |
| 3001 | 3019 | }else{ |
| 3002 | | - fprintf(p->out, "ANALYZE sqlite_master;\n"); |
| 3020 | + raw_printf(p->out, "ANALYZE sqlite_master;\n"); |
| 3003 | 3021 | sqlite3_exec(p->db, "SELECT 'ANALYZE sqlite_master'", |
| 3004 | 3022 | callback, &data, &zErrMsg); |
| 3005 | 3023 | data.mode = MODE_Insert; |
| 3006 | 3024 | data.zDestTable = "sqlite_stat1"; |
| 3007 | 3025 | shell_exec(p->db, "SELECT * FROM sqlite_stat1", |
| | @@ -3010,25 +3028,25 @@ |
| 3010 | 3028 | shell_exec(p->db, "SELECT * FROM sqlite_stat3", |
| 3011 | 3029 | shell_callback, &data,&zErrMsg); |
| 3012 | 3030 | data.zDestTable = "sqlite_stat4"; |
| 3013 | 3031 | shell_exec(p->db, "SELECT * FROM sqlite_stat4", |
| 3014 | 3032 | shell_callback, &data, &zErrMsg); |
| 3015 | | - fprintf(p->out, "ANALYZE sqlite_master;\n"); |
| 3033 | + raw_printf(p->out, "ANALYZE sqlite_master;\n"); |
| 3016 | 3034 | } |
| 3017 | 3035 | }else |
| 3018 | 3036 | |
| 3019 | 3037 | if( c=='h' && strncmp(azArg[0], "headers", n)==0 ){ |
| 3020 | 3038 | if( nArg==2 ){ |
| 3021 | 3039 | p->showHeader = booleanValue(azArg[1]); |
| 3022 | 3040 | }else{ |
| 3023 | | - fprintf(stderr, "Usage: .headers on|off\n"); |
| 3041 | + raw_printf(stderr, "Usage: .headers on|off\n"); |
| 3024 | 3042 | rc = 1; |
| 3025 | 3043 | } |
| 3026 | 3044 | }else |
| 3027 | 3045 | |
| 3028 | 3046 | if( c=='h' && strncmp(azArg[0], "help", n)==0 ){ |
| 3029 | | - fprintf(p->out, "%s", zHelp); |
| 3047 | + utf8_printf(p->out, "%s", zHelp); |
| 3030 | 3048 | }else |
| 3031 | 3049 | |
| 3032 | 3050 | if( c=='i' && strncmp(azArg[0], "import", n)==0 ){ |
| 3033 | 3051 | char *zTable; /* Insert data into this table */ |
| 3034 | 3052 | char *zFile; /* Name of file to extra content from */ |
| | @@ -3042,31 +3060,32 @@ |
| 3042 | 3060 | ImportCtx sCtx; /* Reader context */ |
| 3043 | 3061 | char *(SQLITE_CDECL *xRead)(ImportCtx*); /* Func to read one value */ |
| 3044 | 3062 | int (SQLITE_CDECL *xCloser)(FILE*); /* Func to close file */ |
| 3045 | 3063 | |
| 3046 | 3064 | if( nArg!=3 ){ |
| 3047 | | - fprintf(stderr, "Usage: .import FILE TABLE\n"); |
| 3065 | + raw_printf(stderr, "Usage: .import FILE TABLE\n"); |
| 3048 | 3066 | goto meta_command_exit; |
| 3049 | 3067 | } |
| 3050 | 3068 | zFile = azArg[1]; |
| 3051 | 3069 | zTable = azArg[2]; |
| 3052 | 3070 | seenInterrupt = 0; |
| 3053 | 3071 | memset(&sCtx, 0, sizeof(sCtx)); |
| 3054 | 3072 | open_db(p, 0); |
| 3055 | 3073 | nSep = strlen30(p->colSeparator); |
| 3056 | 3074 | if( nSep==0 ){ |
| 3057 | | - fprintf(stderr, "Error: non-null column separator required for import\n"); |
| 3075 | + raw_printf(stderr, |
| 3076 | + "Error: non-null column separator required for import\n"); |
| 3058 | 3077 | return 1; |
| 3059 | 3078 | } |
| 3060 | 3079 | if( nSep>1 ){ |
| 3061 | | - fprintf(stderr, "Error: multi-character column separators not allowed" |
| 3080 | + raw_printf(stderr, "Error: multi-character column separators not allowed" |
| 3062 | 3081 | " for import\n"); |
| 3063 | 3082 | return 1; |
| 3064 | 3083 | } |
| 3065 | 3084 | nSep = strlen30(p->rowSeparator); |
| 3066 | 3085 | if( nSep==0 ){ |
| 3067 | | - fprintf(stderr, "Error: non-null row separator required for import\n"); |
| 3086 | + raw_printf(stderr, "Error: non-null row separator required for import\n"); |
| 3068 | 3087 | return 1; |
| 3069 | 3088 | } |
| 3070 | 3089 | if( nSep==2 && p->mode==MODE_Csv && strcmp(p->rowSeparator, SEP_CrLf)==0 ){ |
| 3071 | 3090 | /* When importing CSV (only), if the row separator is set to the |
| 3072 | 3091 | ** default output row separator, change it to the default input |
| | @@ -3074,19 +3093,19 @@ |
| 3074 | 3093 | ** and output row separators. */ |
| 3075 | 3094 | sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row); |
| 3076 | 3095 | nSep = strlen30(p->rowSeparator); |
| 3077 | 3096 | } |
| 3078 | 3097 | if( nSep>1 ){ |
| 3079 | | - fprintf(stderr, "Error: multi-character row separators not allowed" |
| 3098 | + raw_printf(stderr, "Error: multi-character row separators not allowed" |
| 3080 | 3099 | " for import\n"); |
| 3081 | 3100 | return 1; |
| 3082 | 3101 | } |
| 3083 | 3102 | sCtx.zFile = zFile; |
| 3084 | 3103 | sCtx.nLine = 1; |
| 3085 | 3104 | if( sCtx.zFile[0]=='|' ){ |
| 3086 | 3105 | #ifdef SQLITE_OMIT_POPEN |
| 3087 | | - fprintf(stderr, "Error: pipes are not supported in this OS\n"); |
| 3106 | + raw_printf(stderr, "Error: pipes are not supported in this OS\n"); |
| 3088 | 3107 | return 1; |
| 3089 | 3108 | #else |
| 3090 | 3109 | sCtx.in = popen(sCtx.zFile+1, "r"); |
| 3091 | 3110 | sCtx.zFile = "<pipe>"; |
| 3092 | 3111 | xCloser = pclose; |
| | @@ -3099,18 +3118,18 @@ |
| 3099 | 3118 | xRead = ascii_read_one_field; |
| 3100 | 3119 | }else{ |
| 3101 | 3120 | xRead = csv_read_one_field; |
| 3102 | 3121 | } |
| 3103 | 3122 | if( sCtx.in==0 ){ |
| 3104 | | - fprintf(stderr, "Error: cannot open \"%s\"\n", zFile); |
| 3123 | + utf8_printf(stderr, "Error: cannot open \"%s\"\n", zFile); |
| 3105 | 3124 | return 1; |
| 3106 | 3125 | } |
| 3107 | 3126 | sCtx.cColSep = p->colSeparator[0]; |
| 3108 | 3127 | sCtx.cRowSep = p->rowSeparator[0]; |
| 3109 | 3128 | zSql = sqlite3_mprintf("SELECT * FROM %s", zTable); |
| 3110 | 3129 | if( zSql==0 ){ |
| 3111 | | - fprintf(stderr, "Error: out of memory\n"); |
| 3130 | + raw_printf(stderr, "Error: out of memory\n"); |
| 3112 | 3131 | xCloser(sCtx.in); |
| 3113 | 3132 | return 1; |
| 3114 | 3133 | } |
| 3115 | 3134 | nByte = strlen30(zSql); |
| 3116 | 3135 | rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); |
| | @@ -3125,18 +3144,18 @@ |
| 3125 | 3144 | } |
| 3126 | 3145 | if( cSep=='(' ){ |
| 3127 | 3146 | sqlite3_free(zCreate); |
| 3128 | 3147 | sqlite3_free(sCtx.z); |
| 3129 | 3148 | xCloser(sCtx.in); |
| 3130 | | - fprintf(stderr,"%s: empty file\n", sCtx.zFile); |
| 3149 | + utf8_printf(stderr,"%s: empty file\n", sCtx.zFile); |
| 3131 | 3150 | return 1; |
| 3132 | 3151 | } |
| 3133 | 3152 | zCreate = sqlite3_mprintf("%z\n)", zCreate); |
| 3134 | 3153 | rc = sqlite3_exec(p->db, zCreate, 0, 0, 0); |
| 3135 | 3154 | sqlite3_free(zCreate); |
| 3136 | 3155 | if( rc ){ |
| 3137 | | - fprintf(stderr, "CREATE TABLE %s(...) failed: %s\n", zTable, |
| 3156 | + utf8_printf(stderr, "CREATE TABLE %s(...) failed: %s\n", zTable, |
| 3138 | 3157 | sqlite3_errmsg(p->db)); |
| 3139 | 3158 | sqlite3_free(sCtx.z); |
| 3140 | 3159 | xCloser(sCtx.in); |
| 3141 | 3160 | return 1; |
| 3142 | 3161 | } |
| | @@ -3143,21 +3162,21 @@ |
| 3143 | 3162 | rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); |
| 3144 | 3163 | } |
| 3145 | 3164 | sqlite3_free(zSql); |
| 3146 | 3165 | if( rc ){ |
| 3147 | 3166 | if (pStmt) sqlite3_finalize(pStmt); |
| 3148 | | - fprintf(stderr,"Error: %s\n", sqlite3_errmsg(p->db)); |
| 3167 | + utf8_printf(stderr,"Error: %s\n", sqlite3_errmsg(p->db)); |
| 3149 | 3168 | xCloser(sCtx.in); |
| 3150 | 3169 | return 1; |
| 3151 | 3170 | } |
| 3152 | 3171 | nCol = sqlite3_column_count(pStmt); |
| 3153 | 3172 | sqlite3_finalize(pStmt); |
| 3154 | 3173 | pStmt = 0; |
| 3155 | 3174 | if( nCol==0 ) return 0; /* no columns, no error */ |
| 3156 | 3175 | zSql = sqlite3_malloc64( nByte*2 + 20 + nCol*2 ); |
| 3157 | 3176 | if( zSql==0 ){ |
| 3158 | | - fprintf(stderr, "Error: out of memory\n"); |
| 3177 | + raw_printf(stderr, "Error: out of memory\n"); |
| 3159 | 3178 | xCloser(sCtx.in); |
| 3160 | 3179 | return 1; |
| 3161 | 3180 | } |
| 3162 | 3181 | sqlite3_snprintf(nByte+20, zSql, "INSERT INTO \"%w\" VALUES(?", zTable); |
| 3163 | 3182 | j = strlen30(zSql); |
| | @@ -3168,11 +3187,11 @@ |
| 3168 | 3187 | zSql[j++] = ')'; |
| 3169 | 3188 | zSql[j] = 0; |
| 3170 | 3189 | rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); |
| 3171 | 3190 | sqlite3_free(zSql); |
| 3172 | 3191 | if( rc ){ |
| 3173 | | - fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 3192 | + utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 3174 | 3193 | if (pStmt) sqlite3_finalize(pStmt); |
| 3175 | 3194 | xCloser(sCtx.in); |
| 3176 | 3195 | return 1; |
| 3177 | 3196 | } |
| 3178 | 3197 | needCommit = sqlite3_get_autocommit(p->db); |
| | @@ -3192,11 +3211,11 @@ |
| 3192 | 3211 | ** the remaining columns. |
| 3193 | 3212 | */ |
| 3194 | 3213 | if( p->mode==MODE_Ascii && (z==0 || z[0]==0) && i==0 ) break; |
| 3195 | 3214 | sqlite3_bind_text(pStmt, i+1, z, -1, SQLITE_TRANSIENT); |
| 3196 | 3215 | if( i<nCol-1 && sCtx.cTerm!=sCtx.cColSep ){ |
| 3197 | | - fprintf(stderr, "%s:%d: expected %d columns but found %d - " |
| 3216 | + utf8_printf(stderr, "%s:%d: expected %d columns but found %d - " |
| 3198 | 3217 | "filling the rest with NULL\n", |
| 3199 | 3218 | sCtx.zFile, startLine, nCol, i+1); |
| 3200 | 3219 | i += 2; |
| 3201 | 3220 | while( i<=nCol ){ sqlite3_bind_null(pStmt, i); i++; } |
| 3202 | 3221 | } |
| | @@ -3204,20 +3223,20 @@ |
| 3204 | 3223 | if( sCtx.cTerm==sCtx.cColSep ){ |
| 3205 | 3224 | do{ |
| 3206 | 3225 | xRead(&sCtx); |
| 3207 | 3226 | i++; |
| 3208 | 3227 | }while( sCtx.cTerm==sCtx.cColSep ); |
| 3209 | | - fprintf(stderr, "%s:%d: expected %d columns but found %d - " |
| 3228 | + utf8_printf(stderr, "%s:%d: expected %d columns but found %d - " |
| 3210 | 3229 | "extras ignored\n", |
| 3211 | 3230 | sCtx.zFile, startLine, nCol, i); |
| 3212 | 3231 | } |
| 3213 | 3232 | if( i>=nCol ){ |
| 3214 | 3233 | sqlite3_step(pStmt); |
| 3215 | 3234 | rc = sqlite3_reset(pStmt); |
| 3216 | 3235 | if( rc!=SQLITE_OK ){ |
| 3217 | | - fprintf(stderr, "%s:%d: INSERT failed: %s\n", sCtx.zFile, startLine, |
| 3218 | | - sqlite3_errmsg(p->db)); |
| 3236 | + utf8_printf(stderr, "%s:%d: INSERT failed: %s\n", sCtx.zFile, |
| 3237 | + startLine, sqlite3_errmsg(p->db)); |
| 3219 | 3238 | } |
| 3220 | 3239 | } |
| 3221 | 3240 | }while( sCtx.cTerm!=EOF ); |
| 3222 | 3241 | |
| 3223 | 3242 | xCloser(sCtx.in); |
| | @@ -3255,20 +3274,21 @@ |
| 3255 | 3274 | "ORDER BY 1", |
| 3256 | 3275 | callback, &data, &zErrMsg |
| 3257 | 3276 | ); |
| 3258 | 3277 | zShellStatic = 0; |
| 3259 | 3278 | }else{ |
| 3260 | | - fprintf(stderr, "Usage: .indexes ?LIKE-PATTERN?\n"); |
| 3279 | + raw_printf(stderr, "Usage: .indexes ?LIKE-PATTERN?\n"); |
| 3261 | 3280 | rc = 1; |
| 3262 | 3281 | goto meta_command_exit; |
| 3263 | 3282 | } |
| 3264 | 3283 | if( zErrMsg ){ |
| 3265 | | - fprintf(stderr,"Error: %s\n", zErrMsg); |
| 3284 | + utf8_printf(stderr,"Error: %s\n", zErrMsg); |
| 3266 | 3285 | sqlite3_free(zErrMsg); |
| 3267 | 3286 | rc = 1; |
| 3268 | 3287 | }else if( rc != SQLITE_OK ){ |
| 3269 | | - fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n"); |
| 3288 | + raw_printf(stderr, |
| 3289 | + "Error: querying sqlite_master and sqlite_temp_master\n"); |
| 3270 | 3290 | rc = 1; |
| 3271 | 3291 | } |
| 3272 | 3292 | }else |
| 3273 | 3293 | |
| 3274 | 3294 | #ifdef SQLITE_ENABLE_IOTRACE |
| | @@ -3282,11 +3302,11 @@ |
| 3282 | 3302 | sqlite3IoTrace = iotracePrintf; |
| 3283 | 3303 | iotrace = stdout; |
| 3284 | 3304 | }else{ |
| 3285 | 3305 | iotrace = fopen(azArg[1], "w"); |
| 3286 | 3306 | if( iotrace==0 ){ |
| 3287 | | - fprintf(stderr, "Error: cannot open \"%s\"\n", azArg[1]); |
| 3307 | + utf8_printf(stderr, "Error: cannot open \"%s\"\n", azArg[1]); |
| 3288 | 3308 | sqlite3IoTrace = 0; |
| 3289 | 3309 | rc = 1; |
| 3290 | 3310 | }else{ |
| 3291 | 3311 | sqlite3IoTrace = iotracePrintf; |
| 3292 | 3312 | } |
| | @@ -3317,11 +3337,11 @@ |
| 3317 | 3337 | for(i=0; i<ArraySize(aLimit); i++){ |
| 3318 | 3338 | printf("%20s %d\n", aLimit[i].zLimitName, |
| 3319 | 3339 | sqlite3_limit(p->db, aLimit[i].limitCode, -1)); |
| 3320 | 3340 | } |
| 3321 | 3341 | }else if( nArg>3 ){ |
| 3322 | | - fprintf(stderr, "Usage: .limit NAME ?NEW-VALUE?\n"); |
| 3342 | + raw_printf(stderr, "Usage: .limit NAME ?NEW-VALUE?\n"); |
| 3323 | 3343 | rc = 1; |
| 3324 | 3344 | goto meta_command_exit; |
| 3325 | 3345 | }else{ |
| 3326 | 3346 | int iLimit = -1; |
| 3327 | 3347 | n2 = strlen30(azArg[1]); |
| | @@ -3328,18 +3348,18 @@ |
| 3328 | 3348 | for(i=0; i<ArraySize(aLimit); i++){ |
| 3329 | 3349 | if( sqlite3_strnicmp(aLimit[i].zLimitName, azArg[1], n2)==0 ){ |
| 3330 | 3350 | if( iLimit<0 ){ |
| 3331 | 3351 | iLimit = i; |
| 3332 | 3352 | }else{ |
| 3333 | | - fprintf(stderr, "ambiguous limit: \"%s\"\n", azArg[1]); |
| 3353 | + utf8_printf(stderr, "ambiguous limit: \"%s\"\n", azArg[1]); |
| 3334 | 3354 | rc = 1; |
| 3335 | 3355 | goto meta_command_exit; |
| 3336 | 3356 | } |
| 3337 | 3357 | } |
| 3338 | 3358 | } |
| 3339 | 3359 | if( iLimit<0 ){ |
| 3340 | | - fprintf(stderr, "unknown limit: \"%s\"\n" |
| 3360 | + utf8_printf(stderr, "unknown limit: \"%s\"\n" |
| 3341 | 3361 | "enter \".limits\" with no arguments for a list.\n", |
| 3342 | 3362 | azArg[1]); |
| 3343 | 3363 | rc = 1; |
| 3344 | 3364 | goto meta_command_exit; |
| 3345 | 3365 | } |
| | @@ -3355,29 +3375,29 @@ |
| 3355 | 3375 | #ifndef SQLITE_OMIT_LOAD_EXTENSION |
| 3356 | 3376 | if( c=='l' && strncmp(azArg[0], "load", n)==0 ){ |
| 3357 | 3377 | const char *zFile, *zProc; |
| 3358 | 3378 | char *zErrMsg = 0; |
| 3359 | 3379 | if( nArg<2 ){ |
| 3360 | | - fprintf(stderr, "Usage: .load FILE ?ENTRYPOINT?\n"); |
| 3380 | + raw_printf(stderr, "Usage: .load FILE ?ENTRYPOINT?\n"); |
| 3361 | 3381 | rc = 1; |
| 3362 | 3382 | goto meta_command_exit; |
| 3363 | 3383 | } |
| 3364 | 3384 | zFile = azArg[1]; |
| 3365 | 3385 | zProc = nArg>=3 ? azArg[2] : 0; |
| 3366 | 3386 | open_db(p, 0); |
| 3367 | 3387 | rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg); |
| 3368 | 3388 | if( rc!=SQLITE_OK ){ |
| 3369 | | - fprintf(stderr, "Error: %s\n", zErrMsg); |
| 3389 | + utf8_printf(stderr, "Error: %s\n", zErrMsg); |
| 3370 | 3390 | sqlite3_free(zErrMsg); |
| 3371 | 3391 | rc = 1; |
| 3372 | 3392 | } |
| 3373 | 3393 | }else |
| 3374 | 3394 | #endif |
| 3375 | 3395 | |
| 3376 | 3396 | if( c=='l' && strncmp(azArg[0], "log", n)==0 ){ |
| 3377 | 3397 | if( nArg!=2 ){ |
| 3378 | | - fprintf(stderr, "Usage: .log FILENAME\n"); |
| 3398 | + raw_printf(stderr, "Usage: .log FILENAME\n"); |
| 3379 | 3399 | rc = 1; |
| 3380 | 3400 | }else{ |
| 3381 | 3401 | const char *zFile = azArg[1]; |
| 3382 | 3402 | output_file_close(p->pLog); |
| 3383 | 3403 | p->pLog = output_file_open(zFile); |
| | @@ -3412,11 +3432,11 @@ |
| 3412 | 3432 | }else if( c2=='a' && strncmp(azArg[1],"ascii",n2)==0 ){ |
| 3413 | 3433 | p->mode = MODE_Ascii; |
| 3414 | 3434 | sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Unit); |
| 3415 | 3435 | sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Record); |
| 3416 | 3436 | }else { |
| 3417 | | - fprintf(stderr,"Error: mode should be one of: " |
| 3437 | + raw_printf(stderr, "Error: mode should be one of: " |
| 3418 | 3438 | "ascii column csv html insert line list tabs tcl\n"); |
| 3419 | 3439 | rc = 1; |
| 3420 | 3440 | } |
| 3421 | 3441 | }else |
| 3422 | 3442 | |
| | @@ -3423,11 +3443,11 @@ |
| 3423 | 3443 | if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){ |
| 3424 | 3444 | if( nArg==2 ){ |
| 3425 | 3445 | sqlite3_snprintf(sizeof(p->nullValue), p->nullValue, |
| 3426 | 3446 | "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]); |
| 3427 | 3447 | }else{ |
| 3428 | | - fprintf(stderr, "Usage: .nullvalue STRING\n"); |
| 3448 | + raw_printf(stderr, "Usage: .nullvalue STRING\n"); |
| 3429 | 3449 | rc = 1; |
| 3430 | 3450 | } |
| 3431 | 3451 | }else |
| 3432 | 3452 | |
| 3433 | 3453 | if( c=='o' && strncmp(azArg[0], "open", n)==0 && n>=2 ){ |
| | @@ -3452,17 +3472,17 @@ |
| 3452 | 3472 | if( c=='o' |
| 3453 | 3473 | && (strncmp(azArg[0], "output", n)==0 || strncmp(azArg[0], "once", n)==0) |
| 3454 | 3474 | ){ |
| 3455 | 3475 | const char *zFile = nArg>=2 ? azArg[1] : "stdout"; |
| 3456 | 3476 | if( nArg>2 ){ |
| 3457 | | - fprintf(stderr, "Usage: .%s FILE\n", azArg[0]); |
| 3477 | + utf8_printf(stderr, "Usage: .%s FILE\n", azArg[0]); |
| 3458 | 3478 | rc = 1; |
| 3459 | 3479 | goto meta_command_exit; |
| 3460 | 3480 | } |
| 3461 | 3481 | if( n>1 && strncmp(azArg[0], "once", n)==0 ){ |
| 3462 | 3482 | if( nArg<2 ){ |
| 3463 | | - fprintf(stderr, "Usage: .once FILE\n"); |
| 3483 | + raw_printf(stderr, "Usage: .once FILE\n"); |
| 3464 | 3484 | rc = 1; |
| 3465 | 3485 | goto meta_command_exit; |
| 3466 | 3486 | } |
| 3467 | 3487 | p->outCount = 2; |
| 3468 | 3488 | }else{ |
| | @@ -3469,17 +3489,17 @@ |
| 3469 | 3489 | p->outCount = 0; |
| 3470 | 3490 | } |
| 3471 | 3491 | output_reset(p); |
| 3472 | 3492 | if( zFile[0]=='|' ){ |
| 3473 | 3493 | #ifdef SQLITE_OMIT_POPEN |
| 3474 | | - fprintf(stderr,"Error: pipes are not supported in this OS\n"); |
| 3494 | + raw_printf(stderr, "Error: pipes are not supported in this OS\n"); |
| 3475 | 3495 | rc = 1; |
| 3476 | 3496 | p->out = stdout; |
| 3477 | 3497 | #else |
| 3478 | 3498 | p->out = popen(zFile + 1, "w"); |
| 3479 | 3499 | if( p->out==0 ){ |
| 3480 | | - fprintf(stderr,"Error: cannot open pipe \"%s\"\n", zFile + 1); |
| 3500 | + utf8_printf(stderr,"Error: cannot open pipe \"%s\"\n", zFile + 1); |
| 3481 | 3501 | p->out = stdout; |
| 3482 | 3502 | rc = 1; |
| 3483 | 3503 | }else{ |
| 3484 | 3504 | sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); |
| 3485 | 3505 | } |
| | @@ -3486,11 +3506,11 @@ |
| 3486 | 3506 | #endif |
| 3487 | 3507 | }else{ |
| 3488 | 3508 | p->out = output_file_open(zFile); |
| 3489 | 3509 | if( p->out==0 ){ |
| 3490 | 3510 | if( strcmp(zFile,"off")!=0 ){ |
| 3491 | | - fprintf(stderr,"Error: cannot write to \"%s\"\n", zFile); |
| 3511 | + utf8_printf(stderr,"Error: cannot write to \"%s\"\n", zFile); |
| 3492 | 3512 | } |
| 3493 | 3513 | p->out = stdout; |
| 3494 | 3514 | rc = 1; |
| 3495 | 3515 | } else { |
| 3496 | 3516 | sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); |
| | @@ -3499,14 +3519,14 @@ |
| 3499 | 3519 | }else |
| 3500 | 3520 | |
| 3501 | 3521 | if( c=='p' && n>=3 && strncmp(azArg[0], "print", n)==0 ){ |
| 3502 | 3522 | int i; |
| 3503 | 3523 | for(i=1; i<nArg; i++){ |
| 3504 | | - if( i>1 ) fprintf(p->out, " "); |
| 3524 | + if( i>1 ) raw_printf(p->out, " "); |
| 3505 | 3525 | utf8_printf(p->out, "%s", azArg[i]); |
| 3506 | 3526 | } |
| 3507 | | - fprintf(p->out, "\n"); |
| 3527 | + raw_printf(p->out, "\n"); |
| 3508 | 3528 | }else |
| 3509 | 3529 | |
| 3510 | 3530 | if( c=='p' && strncmp(azArg[0], "prompt", n)==0 ){ |
| 3511 | 3531 | if( nArg >= 2) { |
| 3512 | 3532 | strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1); |
| | @@ -3521,17 +3541,17 @@ |
| 3521 | 3541 | }else |
| 3522 | 3542 | |
| 3523 | 3543 | if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){ |
| 3524 | 3544 | FILE *alt; |
| 3525 | 3545 | if( nArg!=2 ){ |
| 3526 | | - fprintf(stderr, "Usage: .read FILE\n"); |
| 3546 | + raw_printf(stderr, "Usage: .read FILE\n"); |
| 3527 | 3547 | rc = 1; |
| 3528 | 3548 | goto meta_command_exit; |
| 3529 | 3549 | } |
| 3530 | 3550 | alt = fopen(azArg[1], "rb"); |
| 3531 | 3551 | if( alt==0 ){ |
| 3532 | | - fprintf(stderr,"Error: cannot open \"%s\"\n", azArg[1]); |
| 3552 | + utf8_printf(stderr,"Error: cannot open \"%s\"\n", azArg[1]); |
| 3533 | 3553 | rc = 1; |
| 3534 | 3554 | }else{ |
| 3535 | 3555 | rc = process_input(p, alt); |
| 3536 | 3556 | fclose(alt); |
| 3537 | 3557 | } |
| | @@ -3549,24 +3569,24 @@ |
| 3549 | 3569 | zDb = "main"; |
| 3550 | 3570 | }else if( nArg==3 ){ |
| 3551 | 3571 | zSrcFile = azArg[2]; |
| 3552 | 3572 | zDb = azArg[1]; |
| 3553 | 3573 | }else{ |
| 3554 | | - fprintf(stderr, "Usage: .restore ?DB? FILE\n"); |
| 3574 | + raw_printf(stderr, "Usage: .restore ?DB? FILE\n"); |
| 3555 | 3575 | rc = 1; |
| 3556 | 3576 | goto meta_command_exit; |
| 3557 | 3577 | } |
| 3558 | 3578 | rc = sqlite3_open(zSrcFile, &pSrc); |
| 3559 | 3579 | if( rc!=SQLITE_OK ){ |
| 3560 | | - fprintf(stderr, "Error: cannot open \"%s\"\n", zSrcFile); |
| 3580 | + utf8_printf(stderr, "Error: cannot open \"%s\"\n", zSrcFile); |
| 3561 | 3581 | sqlite3_close(pSrc); |
| 3562 | 3582 | return 1; |
| 3563 | 3583 | } |
| 3564 | 3584 | open_db(p, 0); |
| 3565 | 3585 | pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main"); |
| 3566 | 3586 | if( pBackup==0 ){ |
| 3567 | | - fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 3587 | + utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 3568 | 3588 | sqlite3_close(pSrc); |
| 3569 | 3589 | return 1; |
| 3570 | 3590 | } |
| 3571 | 3591 | while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK |
| 3572 | 3592 | || rc==SQLITE_BUSY ){ |
| | @@ -3577,14 +3597,14 @@ |
| 3577 | 3597 | } |
| 3578 | 3598 | sqlite3_backup_finish(pBackup); |
| 3579 | 3599 | if( rc==SQLITE_DONE ){ |
| 3580 | 3600 | rc = 0; |
| 3581 | 3601 | }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){ |
| 3582 | | - fprintf(stderr, "Error: source database is busy\n"); |
| 3602 | + raw_printf(stderr, "Error: source database is busy\n"); |
| 3583 | 3603 | rc = 1; |
| 3584 | 3604 | }else{ |
| 3585 | | - fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 3605 | + utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 3586 | 3606 | rc = 1; |
| 3587 | 3607 | } |
| 3588 | 3608 | sqlite3_close(pSrc); |
| 3589 | 3609 | }else |
| 3590 | 3610 | |
| | @@ -3591,14 +3611,14 @@ |
| 3591 | 3611 | |
| 3592 | 3612 | if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){ |
| 3593 | 3613 | if( nArg==2 ){ |
| 3594 | 3614 | p->scanstatsOn = booleanValue(azArg[1]); |
| 3595 | 3615 | #ifndef SQLITE_ENABLE_STMT_SCANSTATUS |
| 3596 | | - fprintf(stderr, "Warning: .scanstats not available in this build.\n"); |
| 3616 | + raw_printf(stderr, "Warning: .scanstats not available in this build.\n"); |
| 3597 | 3617 | #endif |
| 3598 | 3618 | }else{ |
| 3599 | | - fprintf(stderr, "Usage: .scanstats on|off\n"); |
| 3619 | + raw_printf(stderr, "Usage: .scanstats on|off\n"); |
| 3600 | 3620 | rc = 1; |
| 3601 | 3621 | } |
| 3602 | 3622 | }else |
| 3603 | 3623 | |
| 3604 | 3624 | if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){ |
| | @@ -3661,20 +3681,20 @@ |
| 3661 | 3681 | "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%' " |
| 3662 | 3682 | "ORDER BY rowid", |
| 3663 | 3683 | callback, &data, &zErrMsg |
| 3664 | 3684 | ); |
| 3665 | 3685 | }else{ |
| 3666 | | - fprintf(stderr, "Usage: .schema ?LIKE-PATTERN?\n"); |
| 3686 | + raw_printf(stderr, "Usage: .schema ?LIKE-PATTERN?\n"); |
| 3667 | 3687 | rc = 1; |
| 3668 | 3688 | goto meta_command_exit; |
| 3669 | 3689 | } |
| 3670 | 3690 | if( zErrMsg ){ |
| 3671 | | - fprintf(stderr,"Error: %s\n", zErrMsg); |
| 3691 | + utf8_printf(stderr,"Error: %s\n", zErrMsg); |
| 3672 | 3692 | sqlite3_free(zErrMsg); |
| 3673 | 3693 | rc = 1; |
| 3674 | 3694 | }else if( rc != SQLITE_OK ){ |
| 3675 | | - fprintf(stderr,"Error: querying schema information\n"); |
| 3695 | + raw_printf(stderr,"Error: querying schema information\n"); |
| 3676 | 3696 | rc = 1; |
| 3677 | 3697 | }else{ |
| 3678 | 3698 | rc = 0; |
| 3679 | 3699 | } |
| 3680 | 3700 | }else |
| | @@ -3711,11 +3731,11 @@ |
| 3711 | 3731 | }else |
| 3712 | 3732 | #endif |
| 3713 | 3733 | |
| 3714 | 3734 | if( c=='s' && strncmp(azArg[0], "separator", n)==0 ){ |
| 3715 | 3735 | if( nArg<2 || nArg>3 ){ |
| 3716 | | - fprintf(stderr, "Usage: .separator COL ?ROW?\n"); |
| 3736 | + raw_printf(stderr, "Usage: .separator COL ?ROW?\n"); |
| 3717 | 3737 | rc = 1; |
| 3718 | 3738 | } |
| 3719 | 3739 | if( nArg>=2 ){ |
| 3720 | 3740 | sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, |
| 3721 | 3741 | "%.*s", (int)ArraySize(p->colSeparator)-1, azArg[1]); |
| | @@ -3730,11 +3750,11 @@ |
| 3730 | 3750 | && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0) |
| 3731 | 3751 | ){ |
| 3732 | 3752 | char *zCmd; |
| 3733 | 3753 | int i, x; |
| 3734 | 3754 | if( nArg<2 ){ |
| 3735 | | - fprintf(stderr, "Usage: .system COMMAND\n"); |
| 3755 | + raw_printf(stderr, "Usage: .system COMMAND\n"); |
| 3736 | 3756 | rc = 1; |
| 3737 | 3757 | goto meta_command_exit; |
| 3738 | 3758 | } |
| 3739 | 3759 | zCmd = sqlite3_mprintf(strchr(azArg[1],' ')==0?"%s":"\"%s\"", azArg[1]); |
| 3740 | 3760 | for(i=2; i<nArg; i++){ |
| | @@ -3741,49 +3761,49 @@ |
| 3741 | 3761 | zCmd = sqlite3_mprintf(strchr(azArg[i],' ')==0?"%z %s":"%z \"%s\"", |
| 3742 | 3762 | zCmd, azArg[i]); |
| 3743 | 3763 | } |
| 3744 | 3764 | x = system(zCmd); |
| 3745 | 3765 | sqlite3_free(zCmd); |
| 3746 | | - if( x ) fprintf(stderr, "System command returns %d\n", x); |
| 3766 | + if( x ) raw_printf(stderr, "System command returns %d\n", x); |
| 3747 | 3767 | }else |
| 3748 | 3768 | |
| 3749 | 3769 | if( c=='s' && strncmp(azArg[0], "show", n)==0 ){ |
| 3750 | 3770 | int i; |
| 3751 | 3771 | if( nArg!=1 ){ |
| 3752 | | - fprintf(stderr, "Usage: .show\n"); |
| 3772 | + raw_printf(stderr, "Usage: .show\n"); |
| 3753 | 3773 | rc = 1; |
| 3754 | 3774 | goto meta_command_exit; |
| 3755 | 3775 | } |
| 3756 | | - fprintf(p->out,"%12.12s: %s\n","echo", p->echoOn ? "on" : "off"); |
| 3757 | | - fprintf(p->out,"%12.12s: %s\n","eqp", p->autoEQP ? "on" : "off"); |
| 3758 | | - fprintf(p->out,"%9.9s: %s\n","explain", p->normalMode.valid ? "on" :"off"); |
| 3759 | | - fprintf(p->out,"%12.12s: %s\n","headers", p->showHeader ? "on" : "off"); |
| 3760 | | - fprintf(p->out,"%12.12s: %s\n","mode", modeDescr[p->mode]); |
| 3761 | | - fprintf(p->out,"%12.12s: ", "nullvalue"); |
| 3776 | + utf8_printf(p->out, "%12.12s: %s\n","echo", p->echoOn ? "on" : "off"); |
| 3777 | + utf8_printf(p->out, "%12.12s: %s\n","eqp", p->autoEQP ? "on" : "off"); |
| 3778 | + utf8_printf(p->out,"%9.9s: %s\n","explain",p->normalMode.valid?"on":"off"); |
| 3779 | + utf8_printf(p->out,"%12.12s: %s\n","headers", p->showHeader ? "on" : "off"); |
| 3780 | + utf8_printf(p->out, "%12.12s: %s\n","mode", modeDescr[p->mode]); |
| 3781 | + utf8_printf(p->out, "%12.12s: ", "nullvalue"); |
| 3762 | 3782 | output_c_string(p->out, p->nullValue); |
| 3763 | | - fprintf(p->out, "\n"); |
| 3764 | | - fprintf(p->out,"%12.12s: %s\n","output", |
| 3783 | + raw_printf(p->out, "\n"); |
| 3784 | + utf8_printf(p->out,"%12.12s: %s\n","output", |
| 3765 | 3785 | strlen30(p->outfile) ? p->outfile : "stdout"); |
| 3766 | | - fprintf(p->out,"%12.12s: ", "colseparator"); |
| 3786 | + utf8_printf(p->out,"%12.12s: ", "colseparator"); |
| 3767 | 3787 | output_c_string(p->out, p->colSeparator); |
| 3768 | | - fprintf(p->out, "\n"); |
| 3769 | | - fprintf(p->out,"%12.12s: ", "rowseparator"); |
| 3788 | + raw_printf(p->out, "\n"); |
| 3789 | + utf8_printf(p->out,"%12.12s: ", "rowseparator"); |
| 3770 | 3790 | output_c_string(p->out, p->rowSeparator); |
| 3771 | | - fprintf(p->out, "\n"); |
| 3772 | | - fprintf(p->out,"%12.12s: %s\n","stats", p->statsOn ? "on" : "off"); |
| 3773 | | - fprintf(p->out,"%12.12s: ","width"); |
| 3791 | + raw_printf(p->out, "\n"); |
| 3792 | + utf8_printf(p->out, "%12.12s: %s\n","stats", p->statsOn ? "on" : "off"); |
| 3793 | + utf8_printf(p->out, "%12.12s: ", "width"); |
| 3774 | 3794 | for (i=0;i<(int)ArraySize(p->colWidth) && p->colWidth[i] != 0;i++) { |
| 3775 | | - fprintf(p->out,"%d ",p->colWidth[i]); |
| 3795 | + raw_printf(p->out, "%d ", p->colWidth[i]); |
| 3776 | 3796 | } |
| 3777 | | - fprintf(p->out,"\n"); |
| 3797 | + raw_printf(p->out, "\n"); |
| 3778 | 3798 | }else |
| 3779 | 3799 | |
| 3780 | 3800 | if( c=='s' && strncmp(azArg[0], "stats", n)==0 ){ |
| 3781 | 3801 | if( nArg==2 ){ |
| 3782 | 3802 | p->statsOn = booleanValue(azArg[1]); |
| 3783 | 3803 | }else{ |
| 3784 | | - fprintf(stderr, "Usage: .stats on|off\n"); |
| 3804 | + raw_printf(stderr, "Usage: .stats on|off\n"); |
| 3785 | 3805 | rc = 1; |
| 3786 | 3806 | } |
| 3787 | 3807 | }else |
| 3788 | 3808 | |
| 3789 | 3809 | if( c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0 ){ |
| | @@ -3880,11 +3900,11 @@ |
| 3880 | 3900 | for(j=i; j<nRow; j+=nPrintRow){ |
| 3881 | 3901 | char *zSp = j<nPrintRow ? "" : " "; |
| 3882 | 3902 | utf8_printf(p->out, "%s%-*s", zSp, maxlen, |
| 3883 | 3903 | azResult[j] ? azResult[j]:""); |
| 3884 | 3904 | } |
| 3885 | | - fprintf(p->out, "\n"); |
| 3905 | + raw_printf(p->out, "\n"); |
| 3886 | 3906 | } |
| 3887 | 3907 | } |
| 3888 | 3908 | |
| 3889 | 3909 | for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]); |
| 3890 | 3910 | sqlite3_free(azResult); |
| | @@ -3923,31 +3943,31 @@ |
| 3923 | 3943 | for(i=0; i<ArraySize(aCtrl); i++){ |
| 3924 | 3944 | if( strncmp(azArg[1], aCtrl[i].zCtrlName, n2)==0 ){ |
| 3925 | 3945 | if( testctrl<0 ){ |
| 3926 | 3946 | testctrl = aCtrl[i].ctrlCode; |
| 3927 | 3947 | }else{ |
| 3928 | | - fprintf(stderr, "ambiguous option name: \"%s\"\n", azArg[1]); |
| 3948 | + utf8_printf(stderr, "ambiguous option name: \"%s\"\n", azArg[1]); |
| 3929 | 3949 | testctrl = -1; |
| 3930 | 3950 | break; |
| 3931 | 3951 | } |
| 3932 | 3952 | } |
| 3933 | 3953 | } |
| 3934 | 3954 | if( testctrl<0 ) testctrl = (int)integerValue(azArg[1]); |
| 3935 | 3955 | if( (testctrl<SQLITE_TESTCTRL_FIRST) || (testctrl>SQLITE_TESTCTRL_LAST) ){ |
| 3936 | | - fprintf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]); |
| 3956 | + utf8_printf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]); |
| 3937 | 3957 | }else{ |
| 3938 | 3958 | switch(testctrl){ |
| 3939 | 3959 | |
| 3940 | 3960 | /* sqlite3_test_control(int, db, int) */ |
| 3941 | 3961 | case SQLITE_TESTCTRL_OPTIMIZATIONS: |
| 3942 | 3962 | case SQLITE_TESTCTRL_RESERVE: |
| 3943 | 3963 | if( nArg==3 ){ |
| 3944 | 3964 | int opt = (int)strtol(azArg[2], 0, 0); |
| 3945 | 3965 | rc2 = sqlite3_test_control(testctrl, p->db, opt); |
| 3946 | | - fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 3966 | + raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 3947 | 3967 | } else { |
| 3948 | | - fprintf(stderr,"Error: testctrl %s takes a single int option\n", |
| 3968 | + utf8_printf(stderr,"Error: testctrl %s takes a single int option\n", |
| 3949 | 3969 | azArg[1]); |
| 3950 | 3970 | } |
| 3951 | 3971 | break; |
| 3952 | 3972 | |
| 3953 | 3973 | /* sqlite3_test_control(int) */ |
| | @@ -3955,24 +3975,25 @@ |
| 3955 | 3975 | case SQLITE_TESTCTRL_PRNG_RESTORE: |
| 3956 | 3976 | case SQLITE_TESTCTRL_PRNG_RESET: |
| 3957 | 3977 | case SQLITE_TESTCTRL_BYTEORDER: |
| 3958 | 3978 | if( nArg==2 ){ |
| 3959 | 3979 | rc2 = sqlite3_test_control(testctrl); |
| 3960 | | - fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 3980 | + raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 3961 | 3981 | } else { |
| 3962 | | - fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]); |
| 3982 | + utf8_printf(stderr,"Error: testctrl %s takes no options\n", |
| 3983 | + azArg[1]); |
| 3963 | 3984 | } |
| 3964 | 3985 | break; |
| 3965 | 3986 | |
| 3966 | 3987 | /* sqlite3_test_control(int, uint) */ |
| 3967 | 3988 | case SQLITE_TESTCTRL_PENDING_BYTE: |
| 3968 | 3989 | if( nArg==3 ){ |
| 3969 | 3990 | unsigned int opt = (unsigned int)integerValue(azArg[2]); |
| 3970 | 3991 | rc2 = sqlite3_test_control(testctrl, opt); |
| 3971 | | - fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 3992 | + raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 3972 | 3993 | } else { |
| 3973 | | - fprintf(stderr,"Error: testctrl %s takes a single unsigned" |
| 3994 | + utf8_printf(stderr,"Error: testctrl %s takes a single unsigned" |
| 3974 | 3995 | " int option\n", azArg[1]); |
| 3975 | 3996 | } |
| 3976 | 3997 | break; |
| 3977 | 3998 | |
| 3978 | 3999 | /* sqlite3_test_control(int, int) */ |
| | @@ -3980,13 +4001,13 @@ |
| 3980 | 4001 | case SQLITE_TESTCTRL_ALWAYS: |
| 3981 | 4002 | case SQLITE_TESTCTRL_NEVER_CORRUPT: |
| 3982 | 4003 | if( nArg==3 ){ |
| 3983 | 4004 | int opt = booleanValue(azArg[2]); |
| 3984 | 4005 | rc2 = sqlite3_test_control(testctrl, opt); |
| 3985 | | - fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 4006 | + raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 3986 | 4007 | } else { |
| 3987 | | - fprintf(stderr,"Error: testctrl %s takes a single int option\n", |
| 4008 | + utf8_printf(stderr,"Error: testctrl %s takes a single int option\n", |
| 3988 | 4009 | azArg[1]); |
| 3989 | 4010 | } |
| 3990 | 4011 | break; |
| 3991 | 4012 | |
| 3992 | 4013 | /* sqlite3_test_control(int, char *) */ |
| | @@ -3993,14 +4014,15 @@ |
| 3993 | 4014 | #ifdef SQLITE_N_KEYWORD |
| 3994 | 4015 | case SQLITE_TESTCTRL_ISKEYWORD: |
| 3995 | 4016 | if( nArg==3 ){ |
| 3996 | 4017 | const char *opt = azArg[2]; |
| 3997 | 4018 | rc2 = sqlite3_test_control(testctrl, opt); |
| 3998 | | - fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 4019 | + raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 3999 | 4020 | } else { |
| 4000 | | - fprintf(stderr,"Error: testctrl %s takes a single char * option\n", |
| 4001 | | - azArg[1]); |
| 4021 | + utf8_printf(stderr, |
| 4022 | + "Error: testctrl %s takes a single char * option\n", |
| 4023 | + azArg[1]); |
| 4002 | 4024 | } |
| 4003 | 4025 | break; |
| 4004 | 4026 | #endif |
| 4005 | 4027 | |
| 4006 | 4028 | case SQLITE_TESTCTRL_IMPOSTER: |
| | @@ -4007,23 +4029,24 @@ |
| 4007 | 4029 | if( nArg==5 ){ |
| 4008 | 4030 | rc2 = sqlite3_test_control(testctrl, p->db, |
| 4009 | 4031 | azArg[2], |
| 4010 | 4032 | integerValue(azArg[3]), |
| 4011 | 4033 | integerValue(azArg[4])); |
| 4012 | | - fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 4034 | + raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); |
| 4013 | 4035 | }else{ |
| 4014 | | - fprintf(stderr,"Usage: .testctrl imposter dbName onoff tnum\n"); |
| 4036 | + raw_printf(stderr,"Usage: .testctrl imposter dbName onoff tnum\n"); |
| 4015 | 4037 | } |
| 4016 | 4038 | break; |
| 4017 | 4039 | |
| 4018 | 4040 | case SQLITE_TESTCTRL_BITVEC_TEST: |
| 4019 | 4041 | case SQLITE_TESTCTRL_FAULT_INSTALL: |
| 4020 | 4042 | case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: |
| 4021 | 4043 | case SQLITE_TESTCTRL_SCRATCHMALLOC: |
| 4022 | 4044 | default: |
| 4023 | | - fprintf(stderr,"Error: CLI support for testctrl %s not implemented\n", |
| 4024 | | - azArg[1]); |
| 4045 | + utf8_printf(stderr, |
| 4046 | + "Error: CLI support for testctrl %s not implemented\n", |
| 4047 | + azArg[1]); |
| 4025 | 4048 | break; |
| 4026 | 4049 | } |
| 4027 | 4050 | } |
| 4028 | 4051 | }else |
| 4029 | 4052 | |
| | @@ -4034,23 +4057,23 @@ |
| 4034 | 4057 | |
| 4035 | 4058 | if( c=='t' && n>=5 && strncmp(azArg[0], "timer", n)==0 ){ |
| 4036 | 4059 | if( nArg==2 ){ |
| 4037 | 4060 | enableTimer = booleanValue(azArg[1]); |
| 4038 | 4061 | if( enableTimer && !HAS_TIMER ){ |
| 4039 | | - fprintf(stderr, "Error: timer not available on this system.\n"); |
| 4062 | + raw_printf(stderr, "Error: timer not available on this system.\n"); |
| 4040 | 4063 | enableTimer = 0; |
| 4041 | 4064 | } |
| 4042 | 4065 | }else{ |
| 4043 | | - fprintf(stderr, "Usage: .timer on|off\n"); |
| 4066 | + raw_printf(stderr, "Usage: .timer on|off\n"); |
| 4044 | 4067 | rc = 1; |
| 4045 | 4068 | } |
| 4046 | 4069 | }else |
| 4047 | 4070 | |
| 4048 | 4071 | if( c=='t' && strncmp(azArg[0], "trace", n)==0 ){ |
| 4049 | 4072 | open_db(p, 0); |
| 4050 | 4073 | if( nArg!=2 ){ |
| 4051 | | - fprintf(stderr, "Usage: .trace FILE|off\n"); |
| 4074 | + raw_printf(stderr, "Usage: .trace FILE|off\n"); |
| 4052 | 4075 | rc = 1; |
| 4053 | 4076 | goto meta_command_exit; |
| 4054 | 4077 | } |
| 4055 | 4078 | output_file_close(p->traceOut); |
| 4056 | 4079 | p->traceOut = output_file_open(azArg[1]); |
| | @@ -4064,87 +4087,87 @@ |
| 4064 | 4087 | }else |
| 4065 | 4088 | |
| 4066 | 4089 | #if SQLITE_USER_AUTHENTICATION |
| 4067 | 4090 | if( c=='u' && strncmp(azArg[0], "user", n)==0 ){ |
| 4068 | 4091 | if( nArg<2 ){ |
| 4069 | | - fprintf(stderr, "Usage: .user SUBCOMMAND ...\n"); |
| 4092 | + raw_printf(stderr, "Usage: .user SUBCOMMAND ...\n"); |
| 4070 | 4093 | rc = 1; |
| 4071 | 4094 | goto meta_command_exit; |
| 4072 | 4095 | } |
| 4073 | 4096 | open_db(p, 0); |
| 4074 | 4097 | if( strcmp(azArg[1],"login")==0 ){ |
| 4075 | 4098 | if( nArg!=4 ){ |
| 4076 | | - fprintf(stderr, "Usage: .user login USER PASSWORD\n"); |
| 4099 | + raw_printf(stderr, "Usage: .user login USER PASSWORD\n"); |
| 4077 | 4100 | rc = 1; |
| 4078 | 4101 | goto meta_command_exit; |
| 4079 | 4102 | } |
| 4080 | 4103 | rc = sqlite3_user_authenticate(p->db, azArg[2], azArg[3], |
| 4081 | 4104 | (int)strlen(azArg[3])); |
| 4082 | 4105 | if( rc ){ |
| 4083 | | - fprintf(stderr, "Authentication failed for user %s\n", azArg[2]); |
| 4106 | + utf8_printf(stderr, "Authentication failed for user %s\n", azArg[2]); |
| 4084 | 4107 | rc = 1; |
| 4085 | 4108 | } |
| 4086 | 4109 | }else if( strcmp(azArg[1],"add")==0 ){ |
| 4087 | 4110 | if( nArg!=5 ){ |
| 4088 | | - fprintf(stderr, "Usage: .user add USER PASSWORD ISADMIN\n"); |
| 4111 | + raw_printf(stderr, "Usage: .user add USER PASSWORD ISADMIN\n"); |
| 4089 | 4112 | rc = 1; |
| 4090 | 4113 | goto meta_command_exit; |
| 4091 | 4114 | } |
| 4092 | 4115 | rc = sqlite3_user_add(p->db, azArg[2], |
| 4093 | 4116 | azArg[3], (int)strlen(azArg[3]), |
| 4094 | 4117 | booleanValue(azArg[4])); |
| 4095 | 4118 | if( rc ){ |
| 4096 | | - fprintf(stderr, "User-Add failed: %d\n", rc); |
| 4119 | + raw_printf(stderr, "User-Add failed: %d\n", rc); |
| 4097 | 4120 | rc = 1; |
| 4098 | 4121 | } |
| 4099 | 4122 | }else if( strcmp(azArg[1],"edit")==0 ){ |
| 4100 | 4123 | if( nArg!=5 ){ |
| 4101 | | - fprintf(stderr, "Usage: .user edit USER PASSWORD ISADMIN\n"); |
| 4124 | + raw_printf(stderr, "Usage: .user edit USER PASSWORD ISADMIN\n"); |
| 4102 | 4125 | rc = 1; |
| 4103 | 4126 | goto meta_command_exit; |
| 4104 | 4127 | } |
| 4105 | 4128 | rc = sqlite3_user_change(p->db, azArg[2], |
| 4106 | 4129 | azArg[3], (int)strlen(azArg[3]), |
| 4107 | 4130 | booleanValue(azArg[4])); |
| 4108 | 4131 | if( rc ){ |
| 4109 | | - fprintf(stderr, "User-Edit failed: %d\n", rc); |
| 4132 | + raw_printf(stderr, "User-Edit failed: %d\n", rc); |
| 4110 | 4133 | rc = 1; |
| 4111 | 4134 | } |
| 4112 | 4135 | }else if( strcmp(azArg[1],"delete")==0 ){ |
| 4113 | 4136 | if( nArg!=3 ){ |
| 4114 | | - fprintf(stderr, "Usage: .user delete USER\n"); |
| 4137 | + raw_printf(stderr, "Usage: .user delete USER\n"); |
| 4115 | 4138 | rc = 1; |
| 4116 | 4139 | goto meta_command_exit; |
| 4117 | 4140 | } |
| 4118 | 4141 | rc = sqlite3_user_delete(p->db, azArg[2]); |
| 4119 | 4142 | if( rc ){ |
| 4120 | | - fprintf(stderr, "User-Delete failed: %d\n", rc); |
| 4143 | + raw_printf(stderr, "User-Delete failed: %d\n", rc); |
| 4121 | 4144 | rc = 1; |
| 4122 | 4145 | } |
| 4123 | 4146 | }else{ |
| 4124 | | - fprintf(stderr, "Usage: .user login|add|edit|delete ...\n"); |
| 4147 | + raw_printf(stderr, "Usage: .user login|add|edit|delete ...\n"); |
| 4125 | 4148 | rc = 1; |
| 4126 | 4149 | goto meta_command_exit; |
| 4127 | 4150 | } |
| 4128 | 4151 | }else |
| 4129 | 4152 | #endif /* SQLITE_USER_AUTHENTICATION */ |
| 4130 | 4153 | |
| 4131 | 4154 | if( c=='v' && strncmp(azArg[0], "version", n)==0 ){ |
| 4132 | | - fprintf(p->out, "SQLite %s %s\n" /*extra-version-info*/, |
| 4155 | + utf8_printf(p->out, "SQLite %s %s\n" /*extra-version-info*/, |
| 4133 | 4156 | sqlite3_libversion(), sqlite3_sourceid()); |
| 4134 | 4157 | }else |
| 4135 | 4158 | |
| 4136 | 4159 | if( c=='v' && strncmp(azArg[0], "vfsinfo", n)==0 ){ |
| 4137 | 4160 | const char *zDbName = nArg==2 ? azArg[1] : "main"; |
| 4138 | 4161 | sqlite3_vfs *pVfs; |
| 4139 | 4162 | if( p->db ){ |
| 4140 | 4163 | sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFS_POINTER, &pVfs); |
| 4141 | 4164 | if( pVfs ){ |
| 4142 | | - fprintf(p->out, "vfs.zName = \"%s\"\n", pVfs->zName); |
| 4143 | | - fprintf(p->out, "vfs.iVersion = %d\n", pVfs->iVersion); |
| 4144 | | - fprintf(p->out, "vfs.szOsFile = %d\n", pVfs->szOsFile); |
| 4145 | | - fprintf(p->out, "vfs.mxPathname = %d\n", pVfs->mxPathname); |
| 4165 | + utf8_printf(p->out, "vfs.zName = \"%s\"\n", pVfs->zName); |
| 4166 | + raw_printf(p->out, "vfs.iVersion = %d\n", pVfs->iVersion); |
| 4167 | + raw_printf(p->out, "vfs.szOsFile = %d\n", pVfs->szOsFile); |
| 4168 | + raw_printf(p->out, "vfs.mxPathname = %d\n", pVfs->mxPathname); |
| 4146 | 4169 | } |
| 4147 | 4170 | } |
| 4148 | 4171 | }else |
| 4149 | 4172 | |
| 4150 | 4173 | if( c=='v' && strncmp(azArg[0], "vfsname", n)==0 ){ |
| | @@ -4151,11 +4174,11 @@ |
| 4151 | 4174 | const char *zDbName = nArg==2 ? azArg[1] : "main"; |
| 4152 | 4175 | char *zVfsName = 0; |
| 4153 | 4176 | if( p->db ){ |
| 4154 | 4177 | sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName); |
| 4155 | 4178 | if( zVfsName ){ |
| 4156 | | - fprintf(p->out, "%s\n", zVfsName); |
| 4179 | + utf8_printf(p->out, "%s\n", zVfsName); |
| 4157 | 4180 | sqlite3_free(zVfsName); |
| 4158 | 4181 | } |
| 4159 | 4182 | } |
| 4160 | 4183 | }else |
| 4161 | 4184 | |
| | @@ -4173,11 +4196,11 @@ |
| 4173 | 4196 | p->colWidth[j-1] = (int)integerValue(azArg[j]); |
| 4174 | 4197 | } |
| 4175 | 4198 | }else |
| 4176 | 4199 | |
| 4177 | 4200 | { |
| 4178 | | - fprintf(stderr, "Error: unknown command or invalid arguments: " |
| 4201 | + utf8_printf(stderr, "Error: unknown command or invalid arguments: " |
| 4179 | 4202 | " \"%s\". Enter \".help\" for help\n", azArg[0]); |
| 4180 | 4203 | rc = 1; |
| 4181 | 4204 | } |
| 4182 | 4205 | |
| 4183 | 4206 | meta_command_exit: |
| | @@ -4308,11 +4331,11 @@ |
| 4308 | 4331 | nLine = strlen30(zLine); |
| 4309 | 4332 | if( nSql+nLine+2>=nAlloc ){ |
| 4310 | 4333 | nAlloc = nSql+nLine+100; |
| 4311 | 4334 | zSql = realloc(zSql, nAlloc); |
| 4312 | 4335 | if( zSql==0 ){ |
| 4313 | | - fprintf(stderr, "Error: out of memory\n"); |
| 4336 | + raw_printf(stderr, "Error: out of memory\n"); |
| 4314 | 4337 | exit(1); |
| 4315 | 4338 | } |
| 4316 | 4339 | } |
| 4317 | 4340 | nSqlPrior = nSql; |
| 4318 | 4341 | if( nSql==0 ){ |
| | @@ -4342,19 +4365,19 @@ |
| 4342 | 4365 | "Error: near line %d:", startline); |
| 4343 | 4366 | }else{ |
| 4344 | 4367 | sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:"); |
| 4345 | 4368 | } |
| 4346 | 4369 | if( zErrMsg!=0 ){ |
| 4347 | | - fprintf(stderr, "%s %s\n", zPrefix, zErrMsg); |
| 4370 | + utf8_printf(stderr, "%s %s\n", zPrefix, zErrMsg); |
| 4348 | 4371 | sqlite3_free(zErrMsg); |
| 4349 | 4372 | zErrMsg = 0; |
| 4350 | 4373 | }else{ |
| 4351 | | - fprintf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db)); |
| 4374 | + utf8_printf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db)); |
| 4352 | 4375 | } |
| 4353 | 4376 | errCnt++; |
| 4354 | 4377 | }else if( p->countChanges ){ |
| 4355 | | - fprintf(p->out, "changes: %3d total_changes: %d\n", |
| 4378 | + raw_printf(p->out, "changes: %3d total_changes: %d\n", |
| 4356 | 4379 | sqlite3_changes(p->db), sqlite3_total_changes(p->db)); |
| 4357 | 4380 | } |
| 4358 | 4381 | nSql = 0; |
| 4359 | 4382 | if( p->outCount ){ |
| 4360 | 4383 | output_reset(p); |
| | @@ -4365,11 +4388,11 @@ |
| 4365 | 4388 | nSql = 0; |
| 4366 | 4389 | } |
| 4367 | 4390 | } |
| 4368 | 4391 | if( nSql ){ |
| 4369 | 4392 | if( !_all_whitespace(zSql) ){ |
| 4370 | | - fprintf(stderr, "Error: incomplete SQL: %s\n", zSql); |
| 4393 | + utf8_printf(stderr, "Error: incomplete SQL: %s\n", zSql); |
| 4371 | 4394 | errCnt++; |
| 4372 | 4395 | } |
| 4373 | 4396 | } |
| 4374 | 4397 | free(zSql); |
| 4375 | 4398 | free(zLine); |
| | @@ -4456,11 +4479,11 @@ |
| 4456 | 4479 | FILE *in = NULL; |
| 4457 | 4480 | |
| 4458 | 4481 | if (sqliterc == NULL) { |
| 4459 | 4482 | home_dir = find_home_dir(); |
| 4460 | 4483 | if( home_dir==0 ){ |
| 4461 | | - fprintf(stderr, "-- warning: cannot find home directory;" |
| 4484 | + raw_printf(stderr, "-- warning: cannot find home directory;" |
| 4462 | 4485 | " cannot read ~/.sqliterc\n"); |
| 4463 | 4486 | return; |
| 4464 | 4487 | } |
| 4465 | 4488 | sqlite3_initialize(); |
| 4466 | 4489 | zBuf = sqlite3_mprintf("%s/.sqliterc",home_dir); |
| | @@ -4467,11 +4490,11 @@ |
| 4467 | 4490 | sqliterc = zBuf; |
| 4468 | 4491 | } |
| 4469 | 4492 | in = fopen(sqliterc,"rb"); |
| 4470 | 4493 | if( in ){ |
| 4471 | 4494 | if( stdin_is_interactive ){ |
| 4472 | | - fprintf(stderr,"-- Loading resources from %s\n",sqliterc); |
| 4495 | + utf8_printf(stderr,"-- Loading resources from %s\n",sqliterc); |
| 4473 | 4496 | } |
| 4474 | 4497 | process_input(p,in); |
| 4475 | 4498 | fclose(in); |
| 4476 | 4499 | } |
| 4477 | 4500 | sqlite3_free(zBuf); |
| | @@ -4514,18 +4537,18 @@ |
| 4514 | 4537 | #ifdef SQLITE_ENABLE_VFSTRACE |
| 4515 | 4538 | " -vfstrace enable tracing of all VFS calls\n" |
| 4516 | 4539 | #endif |
| 4517 | 4540 | ; |
| 4518 | 4541 | static void usage(int showDetail){ |
| 4519 | | - fprintf(stderr, |
| 4542 | + utf8_printf(stderr, |
| 4520 | 4543 | "Usage: %s [OPTIONS] FILENAME [SQL]\n" |
| 4521 | 4544 | "FILENAME is the name of an SQLite database. A new database is created\n" |
| 4522 | 4545 | "if the file does not previously exist.\n", Argv0); |
| 4523 | 4546 | if( showDetail ){ |
| 4524 | | - fprintf(stderr, "OPTIONS include:\n%s", zOptions); |
| 4547 | + utf8_printf(stderr, "OPTIONS include:\n%s", zOptions); |
| 4525 | 4548 | }else{ |
| 4526 | | - fprintf(stderr, "Use the -help option for additional information\n"); |
| 4549 | + raw_printf(stderr, "Use the -help option for additional information\n"); |
| 4527 | 4550 | } |
| 4528 | 4551 | exit(1); |
| 4529 | 4552 | } |
| 4530 | 4553 | |
| 4531 | 4554 | /* |
| | @@ -4569,11 +4592,11 @@ |
| 4569 | 4592 | ** Get the argument to an --option. Throw an error and die if no argument |
| 4570 | 4593 | ** is available. |
| 4571 | 4594 | */ |
| 4572 | 4595 | static char *cmdline_option_value(int argc, char **argv, int i){ |
| 4573 | 4596 | if( i==argc ){ |
| 4574 | | - fprintf(stderr, "%s: Error: missing argument to %s\n", |
| 4597 | + utf8_printf(stderr, "%s: Error: missing argument to %s\n", |
| 4575 | 4598 | argv[0], argv[argc-1]); |
| 4576 | 4599 | exit(1); |
| 4577 | 4600 | } |
| 4578 | 4601 | return argv[i]; |
| 4579 | 4602 | } |
| | @@ -4589,11 +4612,11 @@ |
| 4589 | 4612 | int nCmd = 0; |
| 4590 | 4613 | char **azCmd = 0; |
| 4591 | 4614 | |
| 4592 | 4615 | #if USE_SYSTEM_SQLITE+0!=1 |
| 4593 | 4616 | if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){ |
| 4594 | | - fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n", |
| 4617 | + utf8_printf(stderr, "SQLite header and source version mismatch\n%s\n%s\n", |
| 4595 | 4618 | sqlite3_sourceid(), SQLITE_SOURCE_ID); |
| 4596 | 4619 | exit(1); |
| 4597 | 4620 | } |
| 4598 | 4621 | #endif |
| 4599 | 4622 | setBinaryMode(stdin); |
| | @@ -4638,11 +4661,11 @@ |
| 4638 | 4661 | ** mean that nothing is read from stdin */ |
| 4639 | 4662 | readStdin = 0; |
| 4640 | 4663 | nCmd++; |
| 4641 | 4664 | azCmd = realloc(azCmd, sizeof(azCmd[0])*nCmd); |
| 4642 | 4665 | if( azCmd==0 ){ |
| 4643 | | - fprintf(stderr, "out of memory\n"); |
| 4666 | + raw_printf(stderr, "out of memory\n"); |
| 4644 | 4667 | exit(1); |
| 4645 | 4668 | } |
| 4646 | 4669 | azCmd[nCmd-1] = z; |
| 4647 | 4670 | } |
| 4648 | 4671 | } |
| | @@ -4720,21 +4743,21 @@ |
| 4720 | 4743 | }else if( strcmp(z,"-vfs")==0 ){ |
| 4721 | 4744 | sqlite3_vfs *pVfs = sqlite3_vfs_find(cmdline_option_value(argc,argv,++i)); |
| 4722 | 4745 | if( pVfs ){ |
| 4723 | 4746 | sqlite3_vfs_register(pVfs, 1); |
| 4724 | 4747 | }else{ |
| 4725 | | - fprintf(stderr, "no such VFS: \"%s\"\n", argv[i]); |
| 4748 | + utf8_printf(stderr, "no such VFS: \"%s\"\n", argv[i]); |
| 4726 | 4749 | exit(1); |
| 4727 | 4750 | } |
| 4728 | 4751 | } |
| 4729 | 4752 | } |
| 4730 | 4753 | if( data.zDbFilename==0 ){ |
| 4731 | 4754 | #ifndef SQLITE_OMIT_MEMORYDB |
| 4732 | 4755 | data.zDbFilename = ":memory:"; |
| 4733 | 4756 | warnInmemoryDb = argc==1; |
| 4734 | 4757 | #else |
| 4735 | | - fprintf(stderr,"%s: Error: no database filename specified\n", Argv0); |
| 4758 | + utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0); |
| 4736 | 4759 | return 1; |
| 4737 | 4760 | #endif |
| 4738 | 4761 | } |
| 4739 | 4762 | data.out = stdout; |
| 4740 | 4763 | |
| | @@ -4852,20 +4875,20 @@ |
| 4852 | 4875 | if( rc && bail_on_error ) return rc==2 ? 0 : rc; |
| 4853 | 4876 | }else{ |
| 4854 | 4877 | open_db(&data, 0); |
| 4855 | 4878 | rc = shell_exec(data.db, z, shell_callback, &data, &zErrMsg); |
| 4856 | 4879 | if( zErrMsg!=0 ){ |
| 4857 | | - fprintf(stderr,"Error: %s\n", zErrMsg); |
| 4880 | + utf8_printf(stderr,"Error: %s\n", zErrMsg); |
| 4858 | 4881 | if( bail_on_error ) return rc!=0 ? rc : 1; |
| 4859 | 4882 | }else if( rc!=0 ){ |
| 4860 | | - fprintf(stderr,"Error: unable to process SQL \"%s\"\n", z); |
| 4883 | + utf8_printf(stderr,"Error: unable to process SQL \"%s\"\n", z); |
| 4861 | 4884 | if( bail_on_error ) return rc; |
| 4862 | 4885 | } |
| 4863 | 4886 | } |
| 4864 | 4887 | }else{ |
| 4865 | | - fprintf(stderr,"%s: Error: unknown option: %s\n", Argv0, z); |
| 4866 | | - fprintf(stderr,"Use -help for a list of options.\n"); |
| 4888 | + utf8_printf(stderr,"%s: Error: unknown option: %s\n", Argv0, z); |
| 4889 | + raw_printf(stderr,"Use -help for a list of options.\n"); |
| 4867 | 4890 | return 1; |
| 4868 | 4891 | } |
| 4869 | 4892 | } |
| 4870 | 4893 | |
| 4871 | 4894 | if( !readStdin ){ |
| | @@ -4879,14 +4902,14 @@ |
| 4879 | 4902 | if( rc ) return rc==2 ? 0 : rc; |
| 4880 | 4903 | }else{ |
| 4881 | 4904 | open_db(&data, 0); |
| 4882 | 4905 | rc = shell_exec(data.db, azCmd[i], shell_callback, &data, &zErrMsg); |
| 4883 | 4906 | if( zErrMsg!=0 ){ |
| 4884 | | - fprintf(stderr,"Error: %s\n", zErrMsg); |
| 4907 | + utf8_printf(stderr,"Error: %s\n", zErrMsg); |
| 4885 | 4908 | return rc!=0 ? rc : 1; |
| 4886 | 4909 | }else if( rc!=0 ){ |
| 4887 | | - fprintf(stderr,"Error: unable to process SQL: %s\n", azCmd[i]); |
| 4910 | + utf8_printf(stderr,"Error: unable to process SQL: %s\n", azCmd[i]); |
| 4888 | 4911 | return rc; |
| 4889 | 4912 | } |
| 4890 | 4913 | } |
| 4891 | 4914 | } |
| 4892 | 4915 | free(azCmd); |
| 4893 | 4916 | |