Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a problem in the csv extension that was triggered when the very first field in the csv file is zero bytes in size. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
b12ddabf07b5e06bcee8dda3f990af3a |
User & Date: | dan 2022-07-05 17:49:04.076 |
Context
2022-07-05
| ||
19:53 | Fix for builds with both SQLITE_DEBUG and SQLITE_OMIT_WINDOWFUNC defined. (check-in: 77916947ce user: dan tags: trunk) | |
17:49 | Fix a problem in the csv extension that was triggered when the very first field in the csv file is zero bytes in size. (check-in: b12ddabf07 user: dan tags: trunk) | |
10:40 | Fix an assert() in btree to be more precise, as the previous form of that asser might fail due to recent performance optimizations. (check-in: 4774938134 user: drh tags: trunk) | |
Changes
Changes to ext/misc/csv.c.
︙ | ︙ | |||
276 277 278 279 280 281 282 283 284 285 286 287 288 289 | } if( c=='\n' ){ p->nLine++; if( p->n>0 && p->z[p->n-1]=='\r' ) p->n--; } p->cTerm = (char)c; } if( p->z ) p->z[p->n] = 0; p->bNotFirst = 1; return p->z; } /* Forward references to the various virtual table methods implemented | > | 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 | } if( c=='\n' ){ p->nLine++; if( p->n>0 && p->z[p->n-1]=='\r' ) p->n--; } p->cTerm = (char)c; } assert( p->z==0 || p->n<p->nAlloc ); if( p->z ) p->z[p->n] = 0; p->bNotFirst = 1; return p->z; } /* Forward references to the various virtual table methods implemented |
︙ | ︙ | |||
807 808 809 810 811 812 813 814 815 816 817 818 819 820 | sqlite3_vtab_cursor *pVtabCursor, int idxNum, const char *idxStr, int argc, sqlite3_value **argv ){ CsvCursor *pCur = (CsvCursor*)pVtabCursor; CsvTable *pTab = (CsvTable*)pVtabCursor->pVtab; pCur->iRowid = 0; if( pCur->rdr.in==0 ){ assert( pCur->rdr.zIn==pTab->zData ); assert( pTab->iStart>=0 ); assert( (size_t)pTab->iStart<=pCur->rdr.nIn ); pCur->rdr.iIn = pTab->iStart; }else{ fseek(pCur->rdr.in, pTab->iStart, SEEK_SET); | > > > > > > | 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 | sqlite3_vtab_cursor *pVtabCursor, int idxNum, const char *idxStr, int argc, sqlite3_value **argv ){ CsvCursor *pCur = (CsvCursor*)pVtabCursor; CsvTable *pTab = (CsvTable*)pVtabCursor->pVtab; pCur->iRowid = 0; /* Ensure the field buffer is always allocated. Otherwise, if the ** first field is zero bytes in size, this may be mistaken for an OOM ** error in csvtabNext(). */ if( csv_append(&pCur->rdr, 0) ) return SQLITE_NOMEM; if( pCur->rdr.in==0 ){ assert( pCur->rdr.zIn==pTab->zData ); assert( pTab->iStart>=0 ); assert( (size_t)pTab->iStart<=pCur->rdr.nIn ); pCur->rdr.iIn = pTab->iStart; }else{ fseek(pCur->rdr.in, pTab->iStart, SEEK_SET); |
︙ | ︙ |
Changes to test/csv01.test.
︙ | ︙ | |||
232 233 234 235 236 237 238 239 240 | DROP TABLE t5_1; CREATE VIRTUAL TABLE t5_1 USING csv(filename='csv01.csv', header); SELECT name FROM temp.pragma_table_info('t5_1'); } {a b c d} do_execsql_test 5.4 { SELECT *, '|' FROM t5_1; } {1 2 3 4 | one two three four | 5 6 7 8 |} finish_test | > > > > > > > > > > > > > > > > > > > > > > | 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | DROP TABLE t5_1; CREATE VIRTUAL TABLE t5_1 USING csv(filename='csv01.csv', header); SELECT name FROM temp.pragma_table_info('t5_1'); } {a b c d} do_execsql_test 5.4 { SELECT *, '|' FROM t5_1; } {1 2 3 4 | one two three four | 5 6 7 8 |} #------------------------------------------------------------------------- proc randomtext {n} { string range [db one {SELECT hex(randomblob($n))}] 1 $n } for {set ii 0} {$ii < 200} {incr ii} { reset_db load_static_extension db csv set fd [open csv.data w] puts $fd "a,b" puts $fd "[randomtext $ii],abcd" close $fd do_execsql_test 6.$ii.1 { CREATE VIRTUAL TABLE abc USING csv(filename='csv.data', header=true); } do_execsql_test 6.$ii.2 { SELECT count(*) FROM abc } 1 } finish_test |