Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add large file support to Windows. Change large file support for Unix so that it compiles automatically - without requiring special options on the compiler command line. (CVS 781) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
2008b56fe11e49d52e28f47d14ccd705 |
User & Date: | drh 2002-11-06 14:08:11.000 |
Context
2002-11-09
| ||
00:33 | Try to better detect when the library is compiled for large file support (LFS) but the support is not available in the host OS kernel. (CVS 782) (check-in: a29d60ecc5 user: drh tags: trunk) | |
2002-11-06
| ||
14:08 | Add large file support to Windows. Change large file support for Unix so that it compiles automatically - without requiring special options on the compiler command line. (CVS 781) (check-in: 2008b56fe1 user: drh tags: trunk) | |
00:59 | Changes to include files so that the >2GB file patch will compile under BSD. (CVS 780) (check-in: 81bb1aed5e user: drh tags: trunk) | |
Changes
Changes to src/os.c.
︙ | ︙ | |||
10 11 12 13 14 15 16 | ** ****************************************************************************** ** ** This file contains code that is specific to particular operating ** systems. The purpose of this file is to provide a uniform abstraction ** on which the rest of SQLite can operate. */ | | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ** ****************************************************************************** ** ** This file contains code that is specific to particular operating ** systems. The purpose of this file is to provide a uniform abstraction ** on which the rest of SQLite can operate. */ #include "os.h" /* Must be first to enable large file support */ #include "sqliteInt.h" #if OS_UNIX # include <time.h> # ifndef O_LARGEFILE # define O_LARGEFILE 0 # endif # ifndef O_NOFOLLOW |
︙ | ︙ | |||
540 541 542 543 544 545 546 | int sqliteOsSeek(OsFile *id, off_t offset){ SEEK(offset/1024 + 1); #if OS_UNIX lseek(id->fd, offset, SEEK_SET); return SQLITE_OK; #endif #if OS_WIN | > > | > | 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 | int sqliteOsSeek(OsFile *id, off_t offset){ SEEK(offset/1024 + 1); #if OS_UNIX lseek(id->fd, offset, SEEK_SET); return SQLITE_OK; #endif #if OS_WIN { LONG upperBits = offset>>32; SetFilePointer(id->h, offset, &upperBits, FILE_BEGIN); } return SQLITE_OK; #endif } /* ** Make sure all writes to a particular file are committed to disk. */ |
︙ | ︙ | |||
576 577 578 579 580 581 582 | */ int sqliteOsTruncate(OsFile *id, off_t nByte){ SimulateIOError(SQLITE_IOERR); #if OS_UNIX return ftruncate(id->fd, nByte)==0 ? SQLITE_OK : SQLITE_IOERR; #endif #if OS_WIN | > > | | > > | > | 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 | */ int sqliteOsTruncate(OsFile *id, off_t nByte){ SimulateIOError(SQLITE_IOERR); #if OS_UNIX return ftruncate(id->fd, nByte)==0 ? SQLITE_OK : SQLITE_IOERR; #endif #if OS_WIN { LONG upperBits = nByte>>32; SetFilePointer(id->h, nByte, &upperBits, FILE_BEGIN); SetEndOfFile(id->h); } return SQLITE_OK; #endif } /* ** Determine the current size of a file in bytes */ int sqliteOsFileSize(OsFile *id, off_t *pSize){ #if OS_UNIX struct stat buf; SimulateIOError(SQLITE_IOERR); if( fstat(id->fd, &buf)!=0 ){ return SQLITE_IOERR; } *pSize = buf.st_size; return SQLITE_OK; #endif #if OS_WIN DWORD upperBits, lowerBits; SimulateIOError(SQLITE_IOERR); lowerBits = GetFileSize(id->h, &upperBits); *pSize = (((off_t)upperBits)<<32) + lowerBits; return SQLITE_OK; #endif } #if OS_WIN /* ** Return true (non-zero) if we are running under WinNT, Win2K or WinXP. |
︙ | ︙ |
Changes to src/os.h.
︙ | ︙ | |||
13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ** This header file (together with is companion C source-code file ** "os.c") attempt to abstract the underlying operating system so that ** the SQLite library will work on both POSIX and windows systems. */ #ifndef _SQLITE_OS_H_ #define _SQLITE_OS_H_ #ifndef OS_UNIX # ifndef OS_WIN # if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__) # define OS_WIN 1 # define OS_UNIX 0 # else # define OS_WIN 0 | > > > > > > > > > > > > | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | ** This header file (together with is companion C source-code file ** "os.c") attempt to abstract the underlying operating system so that ** the SQLite library will work on both POSIX and windows systems. */ #ifndef _SQLITE_OS_H_ #define _SQLITE_OS_H_ /* ** These #defines should enable >2GB file support on Posix if the ** underlying operating system supports it. If the OS lacks ** large file support, or if the OS is windows, these should be no-ops. */ #define _LARGE_FILE 1 #define _FILE_OFFSET_BITS 64 #define _LARGEFILE_SOURCE 1 /* ** Figure out if we are dealing with Unix or Windows. */ #ifndef OS_UNIX # ifndef OS_WIN # if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__) # define OS_WIN 1 # define OS_UNIX 0 # else # define OS_WIN 0 |
︙ | ︙ | |||
60 61 62 63 64 65 66 | #include <windows.h> #include <winbase.h> typedef struct OsFile OsFile; struct OsFile { HANDLE h; /* Handle for accessing the file */ int locked; /* 0: unlocked, <0: write lock, >0: read lock */ }; | > | > > > | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <windows.h> #include <winbase.h> typedef struct OsFile OsFile; struct OsFile { HANDLE h; /* Handle for accessing the file */ int locked; /* 0: unlocked, <0: write lock, >0: read lock */ }; # ifdef _MSC_VER typedef __int64 off_t; # else typedef long long off_t; # endif # define SQLITE_TEMPNAME_SIZE (MAX_PATH+50) # define SQLITE_MIN_SLEEP_MS 1 #endif int sqliteOsDelete(const char*); int sqliteOsFileExists(const char*); int sqliteOsOpenReadWrite(const char*, OsFile*, int*); |
︙ | ︙ |
Changes to src/pager.c.
︙ | ︙ | |||
14 15 16 17 18 19 20 | ** The pager is used to access a database disk file. It implements ** atomic commit and rollback through the use of a journal file that ** is separate from the database file. The pager also implements file ** locking to prevent two processes from writing the same database ** file simultaneously, or one process from reading the database while ** another is writing. ** | | > < | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ** The pager is used to access a database disk file. It implements ** atomic commit and rollback through the use of a journal file that ** is separate from the database file. The pager also implements file ** locking to prevent two processes from writing the same database ** file simultaneously, or one process from reading the database while ** another is writing. ** ** @(#) $Id: pager.c,v 1.55 2002/11/06 14:08:11 drh Exp $ */ #include "os.h" /* Must be first to enable large file support */ #include "sqliteInt.h" #include "pager.h" #include <assert.h> #include <string.h> /* ** The page cache as a whole is always in one of the following ** states: ** |
︙ | ︙ |
Changes to www/changes.tcl.
︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 | } proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Oct 30 (2.7.3)} { <li>Various compiler compatibility fixes.</li> <li>Fix a bug in the "expr IN ()" operator.</li> <li>Accept column names in parentheses.</li> <li>Fix a problem with string memory management in the VDBE</li> <li>Fix a bug in the "table_info" pragma"</li> | > > > > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | } proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Nov ?? (2.7.4)} { <li>Database files can now grow to be up to 2^41 bytes. The old limit was 2^31 bytes.</li> } chng {2002 Oct 30 (2.7.3)} { <li>Various compiler compatibility fixes.</li> <li>Fix a bug in the "expr IN ()" operator.</li> <li>Accept column names in parentheses.</li> <li>Fix a problem with string memory management in the VDBE</li> <li>Fix a bug in the "table_info" pragma"</li> |
︙ | ︙ |
Changes to www/faq.tcl.
1 2 3 | # # Run this script to generated a faq.html output file # | | | 1 2 3 4 5 6 7 8 9 10 11 | # # Run this script to generated a faq.html output file # set rcsid {$Id: faq.tcl,v 1.21 2002/11/06 14:08:12 drh Exp $} puts {<html> <head> <title>SQLite Frequently Asked Questions</title> </head> <body bgcolor="white"> <h1 align="center">Frequently Asked Questions</h1> |
︙ | ︙ | |||
307 308 309 310 311 312 313 | ORDER BY name </pre></blockquote> } faq { Are there any known size limits to SQLite databases? } { | > | | | < | < | | < < < < < < < < < < < < < < < < | 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | ORDER BY name </pre></blockquote> } faq { Are there any known size limits to SQLite databases? } { <p>As of version 2.7.4, SQLite can handle databases up to 2^41 bytes (2 terabytes) in size on both Windows and Unix. Older version of SQLite were limited to databases of 2^31 bytes (2 gigabytes).</p> <p>SQLite arbitrarily limits the amount of data in one row to 1 megabyte. There is a single #define in the source code that can be changed to raise this limit as high as 16 megabytes if desired.</p> <p>There is a theoretical limit of about 2^32 (4 billion) rows in a single table, but this limit has never been tested.</p> There is also a theoretical limit of about 2^32 tables and indices.</p> <p>The name and "CREATE TABLE" statement for a table must fit entirely within a 1-megabyte row of the SQLITE_MASTER table. Other than this, there are no constraints on the length of the name of a table, or on the number of columns, etc. Indices are similarly unconstrained.</p> <p>The names of tables, indices, view, triggers, and columns can be as long as desired. However, the names of SQL functions (as created by the <a href="c_interface.html#cfunc">sqlite_create_function()</a> API) may not exceed 255 characters in length.</p> } faq { What is the maximum size of a VARCHAR in SQLite? } { <p>Remember, SQLite is typeless. A VARCHAR column can hold as much data as any other column. The total amount of data in a single row of the database is limited to 1 megabyte. You can increase this limit to 16 megabytes, if you need to, by adjusting a single #define in the |
︙ | ︙ |
Changes to www/index.tcl.
1 2 3 | # # Run this TCL script to generate HTML for the index.html file. # | | | 1 2 3 4 5 6 7 8 9 10 11 | # # Run this TCL script to generate HTML for the index.html file. # set rcsid {$Id: index.tcl,v 1.70 2002/11/06 14:08:12 drh Exp $} puts {<html> <head><title>SQLite: An Embeddable SQL Database Engine</title></head> <body bgcolor=white> <h1 align=center>SQLite<br>An Embeddable SQL Database Engine</h1> <p align=center>} puts "This page was last modified on [lrange $rcsid 3 4] UTC<br>" |
︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 60 61 62 63 64 | <li>Implements most of SQL92. (<a href="omitted.html">Features not supported</a>)</li> <li>A complete database (with multiple tables and indices) is stored in a single disk file.</li> <li>Atomic commit and rollback protect data integrity.</li> <li>Database files can be freely shared between machines with different byte orders.</li> <li>Small memory footprint: less than 25K lines of C code.</li> <li><a href="speed.html">Four times faster</a> than PostgreSQL. Twice as fast as SQLite 1.0.</li> <li>Very simple <a href="c_interface.html">C/C++ interface</a> requires the use of only three functions and one opaque structure.</li> <li><a href="tclsqlite.html">TCL bindings</a> included. | > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <li>Implements most of SQL92. (<a href="omitted.html">Features not supported</a>)</li> <li>A complete database (with multiple tables and indices) is stored in a single disk file.</li> <li>Atomic commit and rollback protect data integrity.</li> <li>Database files can be freely shared between machines with different byte orders.</li> <li>Supports databases up to 2 terabytes (2^41 bytes) in size.</li> <li>Small memory footprint: less than 25K lines of C code.</li> <li><a href="speed.html">Four times faster</a> than PostgreSQL. Twice as fast as SQLite 1.0.</li> <li>Very simple <a href="c_interface.html">C/C++ interface</a> requires the use of only three functions and one opaque structure.</li> <li><a href="tclsqlite.html">TCL bindings</a> included. |
︙ | ︙ |