]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
:-) (CVS 1719)
authordrh <drh@noemail.net>
Tue, 17 Apr 2001 20:09:43 +0000 (20:09 +0000)
committerdrh <drh@noemail.net>
Tue, 17 Apr 2001 20:09:43 +0000 (20:09 +0000)
FossilOrigin-Name: 8e0476f9004a7db8a3426e57f477393645ff5629

manifest
manifest.uuid
notes/notes1.txt [new file with mode: 0644]
notes/notes2.txt [new file with mode: 0644]
notes/notes3.txt [new file with mode: 0644]

index 196c2dc270df190d07616eee86f5bfa6abdf05f4..4c7f7a84e2384a6af1a038e30db59caacca8e9be 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Begin\sadding\sBTree\scode\s(CVS\s213)
-D 2001-04-17T20:09:11
+C :-)\s(CVS\s1719)
+D 2001-04-17T20:09:44
 F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4
 F Makefile.in ac01d6145714b0d1c9e99382caf03cf30d6f4c8d
 F README 51f6a4e7408b34afa5bc1c0485f61b6a4efb6958
@@ -8,6 +8,9 @@ F configure 260d3be664b6d9b4d2d985e66b6dae1ef723c86e x
 F configure.in 6940e3f88bf3d28a10c73b06ab99fd3a7e039a61
 F doc/lemon.html e233a3e97a779c7a87e1bc4528c664a58e49dd47
 F doc/report1.txt 734cbae63b1310cc643fe5e9e3da1ab55a79b99e
+F notes/notes1.txt b7c0812b704a022e88c621146ae50955c923d464
+F notes/notes2.txt 30b1d05005731ff8b49e430921daf40e5d8c764c
+F notes/notes3.txt cd5e7bd2167d7ef89b1077abdfa68f0af6337744
 F src/TODO 38a68a489e56e9fd4a96263e0ff9404a47368ad4
 F src/btree.c 670b20349bd1d1448cc90f7b9487c2bf7a5c039c
 F src/btree.h f21c240d0c95f93e2a128106d04a6c448ed0eb94
@@ -103,7 +106,7 @@ F www/opcode.tcl cb3a1abf8b7b9be9f3a228d097d6bf8b742c2b6f
 F www/sqlite.tcl cb0d23d8f061a80543928755ec7775da6e4f362f
 F www/tclsqlite.tcl 06f81c401f79a04f2c5ebfb97e7c176225c0aef2
 F www/vdbe.tcl 0c8aaa529dd216ccbf7daaabd80985e413d5f9ad
-P a7bfcbb4131ab17a58d5e843c418b2e1a3ab2abc
-R a9d053b754fd8fb60eea783a8c6d6da7
+P bdb1c425f577d455155982ee2cd8cb686bcaf0da
+R 71de057d1d30d3f00126006f203367a6
 U drh
-Z b0f122553586c19814acf39c12755271
+Z ab8bc94b1c7db1acb4a5bcaf00ffbb81
index 0f06e8051bb906ab3221fc69bc7b26c17245dc47..fa424b975e60779a960e10560107704eee0b07e3 100644 (file)
@@ -1 +1 @@
-bdb1c425f577d455155982ee2cd8cb686bcaf0da
\ No newline at end of file
+8e0476f9004a7db8a3426e57f477393645ff5629
\ No newline at end of file
diff --git a/notes/notes1.txt b/notes/notes1.txt
new file mode 100644 (file)
index 0000000..951711e
--- /dev/null
@@ -0,0 +1,55 @@
+unlocked -> read
+
+   1.  If the journal file exists
+          A.  Open the journal file for exclusive access
+                 i) return SQLITE_BUSY
+          B.  Get a write lock on the database
+                 i) close the journal file
+                ii) return SQLITE_PROTOCOL_ERROR
+          C.  playback the journal
+          D.  close and delete the journal file
+          E.  drop the write lock on the database
+   2.  Get a read lock on the database file.
+          A.  return SQLITE_BUSY
+   3.  return SQLITE_OK
+
+read -> unlocked
+
+   1.  Drop the read lock on the database file
+   2.  Invalidate all pages in the cache
+   3.  return SQLITE_OK
+
+read -> write
+
+   1.  Create the journal file and open for exclusive access
+          A.  return SQLITE_BUSY
+   2.  Drop the read lock on the database
+   3.  Get a write lock on the database 
+          A.  Get a read lock on the database
+                 i) return SQLITE_PROTOCOL_ERROR
+          B.  Delete the journal
+          C.  return SQLITE_BUSY
+   4.  return SQLITE_OK
+
+write -> read  (commit)
+
+   1.  Sync the journal
+   2.  Write all dirty pages
+          A.  playback journal
+          B.  Reload or invalidate all pages in cache
+   3.  Sync the database
+   4.  Drop the write lock on the database
+   5.  Get a read lock on the database
+          A.  return SQLITE_PROTOCOL_ERROR
+   6.  Delete the journal
+   7.  return SQLITE_OK
+
+write -> read  (rollback)
+
+   1.  Playback the journal
+   2.  Drop the write lock on the database
+   3.  Get a read lock on the database
+          A.  return SQLITE_PROTOCOL_ERROR
+   4.  Delete the journal
+   5.  Reload or invalidate all pages in cache
+   6.  SQLITE_FULL
diff --git a/notes/notes2.txt b/notes/notes2.txt
new file mode 100644 (file)
index 0000000..e31a7db
--- /dev/null
@@ -0,0 +1,18 @@
+How to do a B*Tree insert:
+
+add_to_page(cursor, data, ptr){
+  if( data_fits_on_page ){ add data to page; return; }
+  if( page==root ){
+     newpage1 = lowerpart( page+(data+ptr) );
+     newpage2 = upperpart( page+(data+ptr) );
+     page = newpage1 + center + newpage2;
+     return;
+  }
+  if( move_some_data_left || move_some_data_right ){
+    add data to page
+    return
+  }
+  newpage = upperhalf( page+(data+ptr) );
+  pop cursor one level
+  add_to_page(cursor, center, newpage);
+}
diff --git a/notes/notes3.txt b/notes/notes3.txt
new file mode 100644 (file)
index 0000000..2086580
--- /dev/null
@@ -0,0 +1,105 @@
+The Proposed New SQLite 2.0 Interface design.  (April 16, 2001)
+
+Primary access routines:
+
+  sqlite *sqlite_open(const char *zFilename, int mode);
+  int sqlite_compile(sqlite*, const char *zSql);
+  int sqlite_row(sqlite*, int *argc, const char ***argv);
+  int sqlite_finish(sqlite*);
+  int sqlite_close(sqlite*);
+
+Secondary access routines:
+
+  const char sqlite_version[];
+  const char sqlite_encoding[];
+  int sqlite_complete(const char *);
+  sqlite *sqlite_dup(sqlite*);
+  int sqlite_abort(sqlite*);
+  void sqlite_interrupt(sqlite*);
+  char *sqlite_errmsg(sqlite*);
+  const char **sqlite_columns(sqlite*);
+  int sqlite_argc(sqlite*);
+  const char **sqlite_argv(sqlite*);
+  char *sqlite_vmprintf(const char *zFormat, va_list);
+  int sqlite_table(sqlite*, int *nrow, int *ncolumn, const char ***argv);
+  void sqlite_busy_handler(sqlite*, int(*)(void*,const char*,int), void*);
+
+Access routines that are implement derived from primary and sec
+  
+  char *sqlite_mprintf(const char *zFormat, ...);
+  int sqlite_compile_vprintf(sqlite*, const char *zFormat, va_list);
+  int sqlite_compile_printf(sqlite*, const char *zFormat, ...);
+  int sqlite_busy_timeout(sqlite*, int ms);
+
+The C++ interface is obvious...
+
+Deprecated legacy interfaces:
+
+  int sqlite_exec(
+    sqlite*,
+    char *sql,
+    int (*)(void*,int,char**,char**),
+    void*,
+    char **errmsg
+  );
+  int sqlite_exec_printf(...);
+  int sqlite_exec_vprintf(...);
+  int sqlite_get_table(
+    sqlite*,
+    char *sql,
+    const char ***result,
+    int *nrow,
+    int *ncolumn,
+    char **errmsg
+  );
+  void sqlite_free_table(char**);
+  int sqlite_get_table_printf(...);
+  int sqlite_get_table_vprintf(...);
+
+TCL Interface
+
+  sqlite DB FILENAME ?MODE?
+  DB compile SQL
+  DB row VAR
+  DB argc
+  DB argv ?N?
+  DB table ?VAR?
+  DB columns ?N?
+  DB finish
+  DB abort
+  DB eval SQL ?VAR SCRIPT?
+  DB close
+  DB complete
+  DB timeout MS
+  DB busy SCRIPT
+  DB dup NEWDB
+
+Primary access pattern:
+
+  sqlite *db = sqlite_open("testdb", 0644);
+  sqlite_compile(db, "SELECT * FROM sqlite_master");
+  while( sqlite_row(db, &argc, &argv)==SQLITE_OK ){
+    /* Do something with the row data in argc, argv */
+  }
+  sqlite_finish(db);
+  sqlite_close(db);
+
+Alternative access pattern 1:
+
+  sqlite *db = sqlite_open("testdb", 0644);
+  sqlite_compile(db, "SELECT * FROM sqlite_master");
+  sqlite_table(db, &nrow, &ncolumn, &argv);
+  /* Do something with the matrix data in argv */
+  sqlite_finish(db);
+  sqlite_close(db);
+
+Issues:
+
+  *  If one query is in progress and we do sqlite_compile(), does
+     that abort the current query or return an error code?
+
+  *  What happens here:
+        sqlite_compile(db, "SELECT a FROM t1; SELECT b,c FROM t2;");
+        sqlite_table(db, &nrow, &ncolumn, &argv);
+     What value is returned for nrow and ncolumn?  Or is this an error?
+     Or maybe only the first table is returned?