Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Change the name of the table in the database to "sqlar". |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
50d50f29fd2983c7a07dc5a239601928 |
User & Date: | drh 2014-06-13 17:16:02.001 |
Context
2014-06-13
| ||
17:57 | First attempt at code for a FuseFS on an SQLite archive. Compiles, but does not work quite right. Added -Wall and -Werror to the makefile. check-in: a394ea2f57 user: drh tags: trunk | |
17:16 | Change the name of the table in the database to "sqlar". check-in: 50d50f29fd user: drh tags: trunk | |
2014-06-02
| ||
15:50 | Update the built-in SQLite to the latest 3.8.5 beta from upstream. check-in: ff0460752a user: drh tags: trunk | |
Changes
Changes to sqlar.c.
︙ | ︙ | |||
36 37 38 39 40 41 42 | exit(1); } /* ** The database schema: */ static const char zSchema[] = | | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | exit(1); } /* ** The database schema: */ static const char zSchema[] = "CREATE TABLE IF NOT EXISTS sqlar(\n" " name TEXT PRIMARY KEY,\n" " mode INT,\n" " mtime INT,\n" " sz INT,\n" " data BLOB\n" ");" ; |
︙ | ︙ | |||
277 278 279 280 281 282 283 | check_filename(zFilename); rc = stat(zFilename, &x); if( rc ) errorMsg("no such file or directory: %s\n", zFilename); if( x.st_size>1000000000 ){ errorMsg("file too big: %s\n", zFilename); } if( pStmt==0 ){ | | | 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | check_filename(zFilename); rc = stat(zFilename, &x); if( rc ) errorMsg("no such file or directory: %s\n", zFilename); if( x.st_size>1000000000 ){ errorMsg("file too big: %s\n", zFilename); } if( pStmt==0 ){ db_prepare("REPLACE INTO sqlar(name,mode,mtime,sz,data)" " VALUES(?1,?2,?3,?4,?5)"); } zName = zFilename; while( zName[0]=='/' ) zName++; sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); sqlite3_bind_int(pStmt, 2, x.st_mode); sqlite3_bind_int64(pStmt, 3, x.st_mtime); |
︙ | ︙ | |||
368 369 370 371 372 373 374 | int nFiles = 0; int listFlag = 0; int extractFlag = 0; int verboseFlag = 0; int noCompress = 0; int i, j; | | | 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | int nFiles = 0; int listFlag = 0; int extractFlag = 0; int verboseFlag = 0; int noCompress = 0; int i, j; if( sqlite3_strglob("*/unsqlar", argv[0])==0 ){ extractFlag = 1; } for(i=1; i<argc; i++){ if( argv[i][0]=='-' ){ for(j=1; argv[i][j]; j++){ switch( argv[i][j] ){ case 'l': listFlag = 1; break; |
︙ | ︙ | |||
398 399 400 401 402 403 404 | if( zArchive==0 ) showHelp(argv[0]); if( listFlag ){ int rc; db_open(zArchive, 0); if( verboseFlag ){ db_prepare( "SELECT name, sz, length(data), mode, datetime(mtime,'unixepoch')" | | | | | | 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 | if( zArchive==0 ) showHelp(argv[0]); if( listFlag ){ int rc; db_open(zArchive, 0); if( verboseFlag ){ db_prepare( "SELECT name, sz, length(data), mode, datetime(mtime,'unixepoch')" " FROM sqlar ORDER BY name" ); while( sqlite3_step(pStmt)==SQLITE_ROW ){ printf("%10d %10d %03o %s %s\n", sqlite3_column_int(pStmt, 1), sqlite3_column_int(pStmt, 2), sqlite3_column_int(pStmt, 3)&0777, sqlite3_column_text(pStmt, 4), sqlite3_column_text(pStmt, 0)); } }else{ db_prepare( "SELECT name FROM sqlar ORDER BY name" ); while( sqlite3_step(pStmt)==SQLITE_ROW ){ printf("%s\n", sqlite3_column_text(pStmt,0)); } } db_close(1); }else if( extractFlag ){ const char *zSql; int rc; db_open(zArchive, 0); if( nFiles ){ NameList x; x.azName = azFiles; x.nName = nFiles; sqlite3_create_function(db, "name_on_list", 1, SQLITE_UTF8, (char*)&x, name_on_list, 0, 0); zSql = "SELECT name, mode, mtime, sz, data FROM sqlar" " WHERE name_on_list(filename)"; }else{ zSql = "SELECT name, mode, mtime, sz, data FROM sqlar"; } db_prepare(zSql); while( sqlite3_step(pStmt)==SQLITE_ROW ){ const char *zFN = (const char*)sqlite3_column_text(pStmt, 0); check_filename(zFN); if( zFN[0]=='/' ){ errorMsg("absolute pathname: %s\n", zFN); |
︙ | ︙ |