 				p->Mode = MODE_Explain;
 				p->ShowHeader = 1;
 				memset(p->ColWidth, 0, _lengthof(p->ColWidth));
-				p->ColWidth[0] = 4;					// addr
-				p->ColWidth[1] = 13;				// opcode
-				p->ColWidth[2] = 4;					// P1
-				p->ColWidth[3] = 4;					// P2
-				p->ColWidth[4] = 4;					// P3
-				p->ColWidth[5] = 13;				// P4
-				p->ColWidth[6] = 2;					// P5
-				p->ColWidth[7] = 13;                // Comment
+				p->ColWidth[0] = 4;		// addr
+				p->ColWidth[1] = 13;	// opcode
+				p->ColWidth[2] = 4;		// P1
+				p->ColWidth[3] = 4;		// P2
+				p->ColWidth[4] = 4;		// P3
+				p->ColWidth[5] = 13;	// P4
+				p->ColWidth[6] = 2;		// P5
+				p->ColWidth[7] = 13;	// Comment
 			}
 			else if (p->ExplainPrev.Valid)
 			{

			if (HAS_TIMER)
				_fprintf(stderr, "%s", _timerHelp);
		}












		else if (c == 'i' && !strncmp(args[0], "import", n) && argsLength == 3)
		{
			char *zTable = args[2];    // Insert data into this table
			char *zFile = args[1];     // The file from which to extract data
			sqlite3_stmt *pStmt = NULL; // A statement
			int nCol;                   // Number of columns in the table
			int nByte;                  // Number of bytes in an SQL string
			int i, j;                   // Loop counters
			int nSep;                   // Number of bytes in p->separator[]
			char *zSql;                 // An SQL statement
			char *line;                // A single line of input from the file
			char **azCol;               // line[] broken up into columns
			char *zCommit;              // How to commit changes
			FILE *in;                   // The input file
			int lineno = 0;             // Line number of input file

			open_db(p);
			nSep = _strlen(p->separator);
			if( nSep==0 ){
				_fprintf(stderr, "Error: non-null separator required for import\n");
				return 1;
			}
			zSql = sqlite3_mprintf("SELECT * FROM %s", zTable);
			if( zSql==0 ){
				_fprintf(stderr, "Error: out_ of memory\n");
				return 1;
			}
			nByte = _strlen(zSql);
			rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
			sqlite3_free(zSql);
			if( rc ){
				if (pStmt) sqlite3_finalize(pStmt);
				_fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
				return 1;
			}
			nCol = sqlite3_column_count(pStmt);
			sqlite3_finalize(pStmt);
			pStmt = 0;
			if( nCol==0 ) return 0; /* no columns, no error */
			zSql = malloc( nByte + 20 + nCol*2 );
			if( zSql==0 ){
				_fprintf(stderr, "Error: out_ of memory\n");
				return 1;
			}
			sqlite3_snprintf(nByte+20, zSql, "INSERT INTO %s VALUES(?", zTable);
			j = _strlen(zSql);
			for(i=1; i<nCol; i++){
				zSql[j++] = ',';
				zSql[j++] = '?';
			}
			zSql[j++] = ')';
			zSql[j] = 0;
			rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
			free(zSql);
			if( rc ){
				_fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db));
				if (pStmt) sqlite3_finalize(pStmt);
				return 1;
			}
			in = fopen(zFile, "rb");
			if( in==0 ){
				_fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
				sqlite3_finalize(pStmt);
				return 1;
			}
			azCol = malloc( sizeof(azCol[0])*(nCol+1) );
			if( azCol==0 ){
				_fprintf(stderr, "Error: out_ of memory\n");
				fclose(in);
				sqlite3_finalize(pStmt);
				return 1;
			}
			sqlite3_exec(p->db, "BEGIN", 0, 0, 0);
			zCommit = "COMMIT";
			while ((line = local_getline(0, in, 1))!=0)
			{
				char *z, c;
				int inQuote = 0;
				lineno++;
				azCol[0] = line;
				for(i=0, z=line; (c = *z)!=0; z++){
					if( c=='"' ) inQuote = !inQuote;
					if( c=='\n' ) lineno++;
					if( !inQuote && c==p->separator[0] && strncmp(z,p->separator,nSep)==0 ){
						*z = 0;
						i++;
						if( i<nCol ){
							azCol[i] = &z[nSep];
							z += nSep-1;
						}
					}
				} /* end for */
				*z = 0;
				if( i+1!=nCol ){
					_fprintf(stderr,
						"Error: %s line %d: expected %d columns of data but found %d\n",
						zFile, lineno, nCol, i+1);
					zCommit = "ROLLBACK";
					free(line);
					rc = 1;
					break; /* from while */
				}
				for(i=0; i<nCol; i++){
					if( azCol[i][0]=='"' ){
						int k;
						for(z=azCol[i], j=1, k=0; z[j]; j++){
							if( z[j]=='"' ){ j++; if( z[j]==0 ) break; }
							z[k++] = z[j];
						}
						z[k] = 0;
					}
					sqlite3_bind_text(pStmt, i+1, azCol[i], -1, SQLITE_STATIC);
				}
				sqlite3_step(pStmt);
				rc = sqlite3_reset(pStmt);
				free(line);
				if( rc!=SQLITE_OK ){
					_fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
					zCommit = "ROLLBACK";
					rc = 1;
					break; /* from while */
				}
			} /* end while */
			free(azCol);
			fclose(in);
			sqlite3_finalize(pStmt);
			sqlite3_exec(p->db, zCommit, 0, 0, 0);
		}
		else if (c == 'i' && !strncmp(args[0], "indices", n) && argsLength < 3)
		{
			struct callback_data data;
			char *zErrMsg = 0;
			open_db(p);
			memcpy(&data, p, sizeof(data));
			data.showHeader = 0;
			data.mode = MODE_List;
			if( argsLength==1 ){
				rc = sqlite3_exec(p->db,
					"SELECT name FROM sqlite_master "
					"WHERE type='index' AND name NOT LIKE 'sqlite_%' "
					"UNION ALL "
					"SELECT name FROM sqlite_temp_master "
					"WHERE type='index' "
					"ORDER BY 1",
					callback, &data, &zErrMsg
					);
			}
			else
			{
				zShellStatic = args[1];
				rc = sqlite3_exec(p->db,
					"SELECT name FROM sqlite_master "
					"WHERE type='index' AND tbl_name LIKE shellstatic() "
					"UNION ALL "
					"SELECT name FROM sqlite_temp_master "
					"WHERE type='index' AND tbl_name LIKE shellstatic() "
					"ORDER BY 1",
					callback, &data, &zErrMsg
					);
				zShellStatic = 0;
			}
			if (zErrMsg)
			{
				_fprintf(stderr,"Error: %s\n", zErrMsg);
				sqlite3_free(zErrMsg);
				rc = 1;
			}
			else if( rc != SQLITE_OK )
			{
				_fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
				rc = 1;

			if (rc != RC_OK)
			{
				_fprintf(stderr, "Error: cannot open \"%s\"\n", destFile);
				Main::Close(dest);
				return 1;
			}
#ifdef HAS_CODEC
