mirror of
				https://github.com/sqlite/sqlite.git
				synced 2025-11-03 16:53:36 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# 2007 April 6
 | 
						|
#
 | 
						|
# The author disclaims copyright to this source code.  In place of
 | 
						|
# a legal notice, here is a blessing:
 | 
						|
#
 | 
						|
#    May you do good and not evil.
 | 
						|
#    May you find forgiveness for yourself and forgive others.
 | 
						|
#    May you share freely, never taking more than you give.
 | 
						|
#
 | 
						|
#***********************************************************************
 | 
						|
# This file implements regression tests for SQLite library.
 | 
						|
#
 | 
						|
# This file implements tests to verify database file format.
 | 
						|
#
 | 
						|
# $Id: filefmt.test,v 1.2 2007/04/06 21:42:22 drh Exp $
 | 
						|
 | 
						|
set testdir [file dirname $argv0]
 | 
						|
source $testdir/tester.tcl
 | 
						|
db close
 | 
						|
file delete -force test.db test.db-journal
 | 
						|
 | 
						|
# Database begins with valid 16-byte header string.
 | 
						|
#
 | 
						|
do_test filefmt-1.1 {
 | 
						|
  sqlite3 db test.db
 | 
						|
  db eval {CREATE TABLE t1(x)}
 | 
						|
  db close
 | 
						|
  hexio_read test.db 0 16
 | 
						|
} {53514C69746520666F726D6174203300}
 | 
						|
 | 
						|
# If the 16-byte header is changed, the file will not open
 | 
						|
#
 | 
						|
do_test filefmt-1.2 {
 | 
						|
  hexio_write test.db 0 54
 | 
						|
  set x [catch {sqlite3 db test.db} err]
 | 
						|
  lappend x $err
 | 
						|
} {0 {}}
 | 
						|
do_test filefmt-1.3 {
 | 
						|
  catchsql {
 | 
						|
    SELECT count(*) FROM sqlite_master
 | 
						|
  }
 | 
						|
} {1 {file is encrypted or is not a database}}
 | 
						|
do_test filefmt-1.4 {
 | 
						|
  db close
 | 
						|
  hexio_write test.db 0 53
 | 
						|
  sqlite3 db test.db
 | 
						|
  catchsql {
 | 
						|
    SELECT count(*) FROM sqlite_master
 | 
						|
  }
 | 
						|
} {0 1}
 | 
						|
 | 
						|
# The page-size is stored at offset 16
 | 
						|
#
 | 
						|
ifcapable pager_pragmas {
 | 
						|
  foreach pagesize {512 1024 2048 4096 8192 16384 32768} {
 | 
						|
     if {[info exists SQLITE_MAX_PAGE_SIZE]
 | 
						|
          && $pagesize>$SQLITE_MAX_PAGE_SIZE} continue
 | 
						|
     do_test filefmt-1.5.$pagesize.1 {
 | 
						|
       db close
 | 
						|
       file delete -force test.db
 | 
						|
       sqlite3 db test.db
 | 
						|
       db eval "PRAGMA auto_vacuum=OFF"
 | 
						|
       db eval "PRAGMA page_size=$pagesize"
 | 
						|
       db eval {CREATE TABLE t1(x)}
 | 
						|
       file size test.db
 | 
						|
     } [expr $pagesize*2]
 | 
						|
     do_test filefmt-1.5.$pagesize.2 {
 | 
						|
       hexio_get_int [hexio_read test.db 16 2]
 | 
						|
     } $pagesize
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
# The page-size must be a power of 2
 | 
						|
#
 | 
						|
do_test filefmt-1.6 {
 | 
						|
  db close
 | 
						|
  hexio_write test.db 16 [hexio_render_int16 1025]
 | 
						|
  sqlite3 db test.db
 | 
						|
  catchsql {
 | 
						|
     SELECT count(*) FROM sqlite_master
 | 
						|
  }
 | 
						|
} {1 {file is encrypted or is not a database}}
 | 
						|
 | 
						|
 | 
						|
# The page-size must be at least 512 bytes
 | 
						|
#
 | 
						|
do_test filefmt-1.7 {
 | 
						|
  db close
 | 
						|
  hexio_write test.db 16 [hexio_render_int16 256]
 | 
						|
  sqlite3 db test.db
 | 
						|
  catchsql {
 | 
						|
     SELECT count(*) FROM sqlite_master
 | 
						|
  }
 | 
						|
} {1 {file is encrypted or is not a database}}
 | 
						|
 | 
						|
# Usable space per page (page-size minus unused space per page)
 | 
						|
# must be at least 500 bytes
 | 
						|
#
 | 
						|
ifcapable pager_pragmas {
 | 
						|
  do_test filefmt-1.8 {
 | 
						|
    db close
 | 
						|
    file delete -force test.db
 | 
						|
    sqlite3 db test.db
 | 
						|
    db eval {PRAGMA page_size=512; CREATE TABLE t1(x)}
 | 
						|
    db close
 | 
						|
    hexio_write test.db 20 10
 | 
						|
    sqlite3 db test.db
 | 
						|
    catchsql {
 | 
						|
       SELECT count(*) FROM sqlite_master
 | 
						|
    }
 | 
						|
  } {1 {file is encrypted or is not a database}}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
finish_test
 |