]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Version 2.0.0 (CVS 272)
authordrh <drh@noemail.net>
Fri, 28 Sep 2001 17:47:14 +0000 (17:47 +0000)
committerdrh <drh@noemail.net>
Fri, 28 Sep 2001 17:47:14 +0000 (17:47 +0000)
FossilOrigin-Name: 1df5386a5557c1fc6a5433e9dbd23009026be369

Makefile.in
Makefile.template
VERSION
manifest
manifest.uuid
publish.sh [new file with mode: 0644]
src/tclsqlite.c
www/changes.tcl
www/index.tcl
www/lang.tcl

index 071172c2315ed79a3fea3d09d31505e8b05c6de3..8c3f9a41f3e9b7d9d203771481a0448a9766dd05 100644 (file)
@@ -230,11 +230,7 @@ fulltest:  testfixture sqlite
 test:  testfixture sqlite
        ./testfixture $(TOP)/test/quick.test
 
-sqlite.tar.gz: 
-       pwd=`pwd`; cd $(TOP)/..; tar czf $$pwd/sqlite.tar.gz sqlite
-
-index.html:    $(TOP)/www/index.tcl sqlite.tar.gz last_change
-       cp ../sqlite-*.tar.gz .
+index.html:    $(TOP)/www/index.tcl last_change
        tclsh $(TOP)/www/index.tcl `cat $(TOP)/VERSION` >index.html
 
 sqlite.html:   $(TOP)/www/sqlite.tcl
@@ -273,11 +269,13 @@ tclsqlite.html:   $(TOP)/www/tclsqlite.tcl
 speed.html:    $(TOP)/www/speed.tcl
        tclsh $(TOP)/www/speed.tcl >speed.html
 
+download.html: $(TOP)/www/download.tcl
+       tclsh $(TOP)/www/download.tcl >download.html
+
 
 # Files to be published on the website.
 #
-PUBLISH = \
-  sqlite.tar.gz \
+DOC = \
   index.html \
   sqlite.html \
   changes.html \
@@ -290,13 +288,12 @@ PUBLISH = \
   crosscompile.html \
   mingw.html \
   tclsqlite.html \
+  download.html \
   speed.html
 
-website:       $(PUBLISH)
-
-publish:       $(PUBLISH)
-       chmod 0644 $(PUBLISH) sqlite-*.tar.gz
-       scp $(PUBLISH) sqlite-*.tar.gz hwaci@oak.he.net:public_html/sw/sqlite
+doc:   $(DOC)
+       mkdir -p doc
+       mv $(DOC) doc
 
 install:       sqlite libsqlite.la sqlite.h
        $(LIBTOOL) $(INSTALL) libsqlite.la $(prefix)/lib
@@ -306,7 +303,7 @@ install:    sqlite libsqlite.la sqlite.h
 clean: 
        rm -f *.lo *.la *.o sqlite libsqlite.la sqlite.h
        rm -rf .libs .deps
-       rm -f lemon lempar.c parse.* sqlite.tar.gz
+       rm -f lemon lempar.c parse.* sqlite*.tar.gz
        rm -f $(PUBLISH)
        rm -f *.da *.bb *.bbg gmon.out
        rm -f testfixture test.db
index 23db62d35149020f304b90b2176eb41118f6e5e3..f76e22c786aeb21655b07e00c46b3ef299707c4a 100644 (file)
@@ -284,11 +284,7 @@ fulltest:  testfixture$(EXE) sqlite$(EXE)
 test:  testfixture$(EXE) sqlite$(EXE)
        ./testfixture$(EXE) $(TOP)/test/quick.test
 
-sqlite.tar.gz: 
-       pwd=`pwd`; cd $(TOP)/..; tar czf $$pwd/sqlite.tar.gz sqlite
-
-index.html:    $(TOP)/www/index.tcl sqlite.tar.gz last_change
-       cp ../sqlite-*.tar.gz .
+index.html:    $(TOP)/www/index.tcl last_change
        tclsh $(TOP)/www/index.tcl `cat $(TOP)/VERSION` >index.html
 
 sqlite.html:   $(TOP)/www/sqlite.tcl
@@ -327,11 +323,13 @@ tclsqlite.html:   $(TOP)/www/tclsqlite.tcl
 speed.html:    $(TOP)/www/speed.tcl
        tclsh $(TOP)/www/speed.tcl >speed.html
 
+download.html: $(TOP)/www/download.tcl
+       tclsh $(TOP)/www/download.tcl >download.html
+
 
 # Files to be published on the website.
 #
-PUBLISH = \
-  sqlite.tar.gz \
+DOC = \
   index.html \
   sqlite.html \
   changes.html \
@@ -344,13 +342,12 @@ PUBLISH = \
   crosscompile.html \
   mingw.html \
   tclsqlite.html \
+  download.html \
   speed.html
 
-website:       $(PUBLISH)
-
-publish:       $(PUBLISH)
-       chmod 0644 $(PUBLISH) sqlite-*.tar.gz
-       scp $(PUBLISH) sqlite-*.tar.gz hwaci@oak.he.net:public_html/sw/sqlite
+doc:   $(DOC)
+       mkdir -p doc
+       mv $(DOC) doc
 
 install:       sqlite libsqlite.a sqlite.h
        mv sqlite /usr/bin
@@ -359,7 +356,7 @@ install:    sqlite libsqlite.a sqlite.h
 
 clean: 
        rm -f *.o sqlite libsqlite.a sqlite.h
-       rm -f lemon lempar.c parse.* sqlite.tar.gz
+       rm -f lemon lempar.c parse.* sqlite*.tar.gz
        rm -f $(PUBLISH)
        rm -f *.da *.bb *.bbg gmon.out
        rm -rf tsrc
diff --git a/VERSION b/VERSION
index 5cf092f4dbd4f504f4981f5df3eb535cc63630e3..227cea215648b1af34a87c9acf5b707fe02d2072 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.0-alpha-3
+2.0.0
index 095bc520b13fa35d512e77c18d3a0a55833742df..51c841272fab590268af9ab601a6bcc77c2b600b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,9 +1,9 @@
-C Put\sin\sthe\snew\sLIBTOOL\sbuild\ssystem.\s(CVS\s271)
-D 2001-09-28T01:34:44
-F Makefile.in 4d29e58224476426cc8c78b631ae478cbad0e1ea
-F Makefile.template 31de3ce7126e8325c759a94e5b72ee8febc43357
+C Version\s2.0.0\s(CVS\s272)
+D 2001-09-28T17:47:14
+F Makefile.in 98d4627cb364537e4c3a29ee806171f3abf5211a
+F Makefile.template 7179523fdf3d6e7933ec843e2352dcfc9785c700
 F README 93d2977cc5c6595c448de16bdefc312b9d401533
-F VERSION 17fadc361fb942d644f92116388409c937c9fa79
+F VERSION 3861a21803fcd9eb92a403027b0da2bb7add4de1
 F aclocal.m4 11faa843caa38fd451bc6aeb43e248d1723a269d
 F config.guess f38b1e93d1e0fa6f5a6913e9e7b12774b9232588
 F config.log 6a73d03433669b10a3f0c221198c3f26b9413914
@@ -17,6 +17,7 @@ F doc/report1.txt a031aaf37b185e4fa540223cb516d3bccec7eeac
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
 F libtool c56e618713c9510a103bda6b95f3ea3900dcacd6
 F ltmain.sh e9ed72eb1d690f447c13945eaf69e28af531eda1
+F publish.sh 88bc1f96946582eb0323c4d31a89767ba6ae46ce
 F src/TODO af7f3cab0228e34149cf98e073aa83d45878e7e6
 F src/btree.c a4a88dfef2072cedfdac09f3a51b7d70b017b9b4
 F src/btree.h 57d653ef5137b91f2a068aaf71a2905468dd2cb7
@@ -41,7 +42,7 @@ F src/shell.tcl 27ecbd63dd88396ad16d81ab44f73e6c0ea9d20e
 F src/sqlite.h.in 08151912b382ded315b5c8fc6288d9d7a9332aa4
 F src/sqliteInt.h 3ead85324704b79b2ae6799d6af3e5fd710756d9
 F src/table.c abd0adbe0fee39d995287b3bcccd908d174dfcac
-F src/tclsqlite.c 04a35d04f06046acc3944121dc6c36717f7f36d5
+F src/tclsqlite.c 765599686c19ed777ac379928d732c8bfc63ebac
 F src/test1.c e4b31f62ea71963cbae44338acf477a04fc8fc49
 F src/test2.c 0168b39225b768cfdadd534406f9dec58c27879e
 F src/test3.c 4a0d7b882fdae731dbb759f512ad867122452f96
@@ -99,18 +100,18 @@ F www/arch.fig d5f9752a4dbf242e9cfffffd3f5762b6c63b3bcf
 F www/arch.png 82ef36db1143828a7abc88b1e308a5f55d4336f4
 F www/arch.tcl c1891efdc00cd76eec72bdbf8b446195902932a3
 F www/c_interface.tcl 52ae81c89bf906b358e04857bd3f76b1a7f61c1b
-F www/changes.tcl d06af04f300162e47ac066e125ef34e863a19ca2
+F www/changes.tcl 47619693c843174b57d41482fcd00e2e70d41fd0
 F www/crosscompile.tcl c99efacb3aefaa550c6e80d91b240f55eb9fd33e
 F www/dynload.tcl 02eb8273aa78cfa9070dd4501dca937fb22b466c
-F www/index.tcl fd8ef2d78f22022d2baea03371a1add75d98d236
-F www/lang.tcl d093693db5d4d7b7127d134807e4e65dea0e5dee
+F www/index.tcl 639a75165dc532a16ddb02055bc69541eecc3fa7
+F www/lang.tcl 33a74d727615ccbee8be7c8efd5876ce008c4b0e
 F www/mingw.tcl fc5f4ba9d336b6e8c97347cc6496d6162461ef60
 F www/opcode.tcl 60222aeb57a7855b2582c374b8753cb5bb53c4ab
 F www/speed.tcl 91b53f9403a62bb322dc1f85a81531309bcfb41c
 F www/sqlite.tcl cb0d23d8f061a80543928755ec7775da6e4f362f
 F www/tclsqlite.tcl 13d50723f583888fc80ae1a38247c0ab415066fa
 F www/vdbe.tcl 0c8aaa529dd216ccbf7daaabd80985e413d5f9ad
-P 3ae952933997c6422ec53b26391ba362c6e5c44a
-R 9eb0a8a330099ee573677e4648d1a9dc
+P 00575d167aea567bc38f8a329aeff7b814eb91c8
+R 81c8ca6ec47dd72d51e7ef41271549d2
 U drh
-Z dd38c213d9c2c1db847a360dc3d08644
+Z 04def0ebf7eae2e65632e77981c5002a
index 806240d8564ce65c00f0693fdbad7a180c2e285c..c5be8b95fee9c0c8742d4912fa3a85db1b7cc4ea 100644 (file)
@@ -1 +1 @@
-00575d167aea567bc38f8a329aeff7b814eb91c8
\ No newline at end of file
+1df5386a5557c1fc6a5433e9dbd23009026be369
\ No newline at end of file
diff --git a/publish.sh b/publish.sh
new file mode 100644 (file)
index 0000000..083a25d
--- /dev/null
@@ -0,0 +1,98 @@
+#!/bin/sh
+#
+# This script is used to compile SQLite and all its documentation and
+# ship everything up to the SQLite website.  This script will only work
+# on the system "zadok" at the Hwaci offices.  But others might find
+# the script useful as an example.
+#
+
+# Set srcdir to the name of the directory that contains the publish.sh
+# script.
+#
+srcdir=`echo "$0" | sed 's%\(^.*\)/[^/][^/]*$%\1%'`
+
+# Get the makefile.
+#
+cp $srcdir/Makefile.template ./Makefile
+
+# Start building stuff.
+#
+make clean
+make sqlite
+strip sqlite
+mv sqlite sqlite.bin
+gzip sqlite.bin
+
+# Build the tclsqlite.so shared library for import into tclsh or wish
+# under Linux
+#
+make target_source
+cd tsrc
+rm shell.c
+TCLDIR=/home/drh/tcltk/8.2linux
+OPTS='-DUSE_TCL_STUBS=1 -DNDEBUG=1 -DOS_UNIX=1 -DOS_WIN=0'
+gcc -fPIC $OPTS -O2 -I. -I$TCLDIR -shared *.c -o tclsqlite.so
+strip tclsqlite.so
+mv tclsqlite.so ..
+cd ..
+gzip tclsqlite.so
+
+# Build the tclsqlite.dll shared library that can be imported into tclsh
+# or wish on windows.
+#
+make target_source
+cd tsrc
+TCLDIR=/home/drh/tcltk/8.2win
+TCLSTUBLIB=$TCLDIR/tclstub82.a
+PATH=$PATH:/opt/mingw/bin
+OPTS='-DUSE_TCL_STUBS=1 -DNDEBUG=1 -DOS_UNIX=0 -DOS_WIN=1'
+CC="i386-mingw32-gcc -O2 $OPTS -I. -I$TCLDIR"
+rm shell.c
+for i in *.c; do
+  CMD="$CC -c $i"
+  echo $CMD
+  $CMD
+done
+echo 'EXPORTS' >tclsqlite.def
+echo 'Tclsqlite_Init' >>tclsqlite.def
+echo 'Sqlite_Init' >>tclsqlite.def
+i386-mingw32-dllwrap \
+     --def tclsqlite.def -v --export-all \
+     --driver-name i386-mingw32-gcc \
+     --dlltool-name i386-mingw32-dlltool \
+     --as i386-mingw32-as \
+     --target i386-mingw32 \
+     -dllname tclsqlite.dll -lmsvcrt *.o $TCLSTUBLIB
+i386-mingw32-strip tclsqlite.dll
+mv tclsqlite.dll ..
+cd ..
+rm -f tclsqlite.zip
+zip tclsqlite.zip tclsqlite.dll
+
+# Build the sqlite.exe executable for windows.
+#
+make target_source
+cd tsrc
+rm tclsqlite.c
+OPTS='-DSTATIC_BUILD=1 -DNDEBUG=1 -DOS_UNIX=0 -DOS_WIN=1'
+i386-mingw32-gcc -O2 $OPTS -I. -I$TCLDIR *.c -o sqlite.exe
+mv sqlite.exe ..
+cd ..
+rm -f sqlite.zip
+zip sqlite.zip sqlite.exe
+
+# Construct a tarball of the source tree
+#
+ORIGIN=`pwd`
+cd $srcdir
+cd ..
+tar czf $ORIGIN/sqlite.tar.gz sqlite
+cd $ORIGIN
+vers=`cat $srcdir/VERSION`
+ln sqlite.tar.gz sqlite-$vers.tar.gz
+
+# Build the website
+#
+cp $srcdir/../historical/* .
+make doc
+ln sqlite.bin.gz sqlite.zip sqlite*.tar.gz tclsqlite.so.gz tclsqlite.zip doc
index 9537a451c7adbe9c5f8905c2fe041fa651742710..bf713e8e4e4ce9065df081e5ac3e1403c35adeb4 100644 (file)
@@ -11,7 +11,7 @@
 *************************************************************************
 ** A TCL Interface to SQLite
 **
-** $Id: tclsqlite.c,v 1.23 2001/09/16 00:13:27 drh Exp $
+** $Id: tclsqlite.c,v 1.24 2001/09/28 17:47:14 drh Exp $
 */
 #ifndef NO_TCL     /* Omit this whole file if TCL is unavailable */
 
@@ -433,6 +433,15 @@ static int DbMain(void *cd, Tcl_Interp *interp, int argc, char **argv){
   return TCL_OK;
 }
 
+/*
+** Provide a dummy Tcl_InitStubs if we are using this as a static
+** library.
+*/
+#ifndef USE_TCL_STUBS
+# undef  Tcl_InitStubs
+# define Tcl_InitStubs(a,b,c)
+#endif
+
 /*
 ** Initialize this module.
 **
@@ -443,6 +452,13 @@ static int DbMain(void *cd, Tcl_Interp *interp, int argc, char **argv){
 ** for additional information.
 */
 int Sqlite_Init(Tcl_Interp *interp){
+  Tcl_InitStubs(interp, "8.0", 0);
+  Tcl_CreateCommand(interp, "sqlite", DbMain, 0, 0);
+  Tcl_PkgProvide(interp, "sqlite", "1.0");
+  return TCL_OK;
+}
+int Tclsqlite_Init(Tcl_Interp *interp){
+  Tcl_InitStubs(interp, "8.0", 0);
   Tcl_CreateCommand(interp, "sqlite", DbMain, 0, 0);
   Tcl_PkgProvide(interp, "sqlite", "1.0");
   return TCL_OK;
@@ -450,6 +466,9 @@ int Sqlite_Init(Tcl_Interp *interp){
 int Sqlite_SafeInit(Tcl_Interp *interp){
   return TCL_OK;
 }
+int Tclsqlite_SafeInit(Tcl_Interp *interp){
+  return TCL_OK;
+}
 
 #if 0
 /*
index 84f42239c1de347db2cf4c966c890efd01134b72..4eb96097086a9e85393f4484550300a49725f8c1 100644 (file)
@@ -17,6 +17,15 @@ proc chng {date desc} {
   puts "<DD><P><UL>$desc</UL></P></DD>"
 }
 
+chng {2001 Sep 28 (2.0.0)} {
+<li>Automatically build binaries for Linux and Windows and put them on
+    the website.</li>
+}
+
+chng {2001 Sep 28 (2.0-alpha-4)} {
+<li>Incorporate makefile patches form A. Rottmann to use LIBTOOL</li>
+}
+
 chng {2001 Sep 27 (2.0-alpha-3)} {
 <li>SQLite now honors the UNIQUE keyword in CREATE UNIQUE INDEX.  Primary
     keys are required to be unique.</li>
index ab793652a2904a6d7269c4b3a3933dbf91caa15f..23c4af1590f2be38d43d121d6b4b898770e67b7d 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Run this TCL script to generate HTML for the index.html file.
 #
-set rcsid {$Id: index.tcl,v 1.41 2001/09/25 01:51:00 drh Exp $}
+set rcsid {$Id: index.tcl,v 1.42 2001/09/28 17:47:14 drh Exp $}
 
 puts {<html>
 <head><title>SQLite: An SQL Database Engine In A C Library</title></head>
@@ -27,9 +27,17 @@ an example of how to use the SQLite library.</p>
 <p>SQLite is <b>not</b> a client library used to connect to a
 big database server.  SQLite <b>is</b> the server.  The SQLite
 library reads and writes directly to and from the database files
-on disk.</p>
+on disk.</p>}
 
-<h2>Features</h2>
+puts {<table align="right"hspace="10">
+<tr><td align="center" bgcolor="#8ee5ee">
+<table border="2"><tr><td align="center">
+<a href="download.html"><big><b>Download<br>SQLite
+</td></tr></table>
+</td></tr>
+</table>}
+
+puts {<h2>Features</h2>
 
 <p><ul>
 <li>Implements a large subset of SQL92.</li>
@@ -42,7 +50,8 @@ on disk.</p>
 <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 TCL interface to the library is included.</li>
+<li>A <a href="tclsqlite.html">TCL interface</a>
+    to the library is included.</li>
 <li>A TCL-based test suite provides near 100% code coverage.</li>
 <li>Self-contained: no external dependencies.</li>
 <li>Built and tested under Linux and Win2K.</li>
@@ -51,35 +60,13 @@ three functions and one opaque structure.</li>
 </p>
 }
 
-puts {<h2>Download</h2>}
+puts {<h2>Download</h2>
 
-puts {<table align="right"hspace="10">
-<tr><td align="center" bgcolor="#8ee5ee">
-<table border="2"><tr><td align="center">
-<a href="sqlite.tar.gz"><big><b>Download SQLite<br>}
-puts "version $vers<br>"
-puts {Now!
-</td></tr></table>
-</td></tr>
-</table>}
-
-
-puts {<p>You can download a tarball containing all source
-code for SQLite
-}
-puts "version $vers"
-puts {
-(including the TCL scripts that generate the
-HTML files for this website) at <a href="sqlite.tar.gz">sqlite.tar.gz</a>.}
-puts "This is a [file size sqlite.tar.gz] byte download."
-set historical [lsort -dict [glob -nocomplain sqlite-*.tar.gz]]
-if {$historical!=""} {
-  puts {The following historical versions of SQLite are also available:}
-  foreach x $historical {
-     puts "<a href=\"$x\">$x</a> ([file size $x] bytes)"
-  }
+<p>
+Precompiled binaries for Linux and Windows and the complete
+source tree are available for <a href="download.html">download</a>.
+</p>
 }
-puts {</p>}
 
 puts {<h2>Current Status</h2>
 
@@ -88,17 +75,6 @@ There are currently no <em>known</em> memory leaks or debilitating bugs
 in the library.  <a href="http://gcc.gnu.org/onlinedocs/gcov_1.html">Gcov</a>
 is used to verify test coverage.</p>
 
-<p>Known bugs:</p>
-
-<ul>
-<li><p>
-  The LIKE operator is suppose to ignore case. 
-  But it only ignores case for 7-bit Latin characters.
-  The case of 8-bit iso8859 characters or UTF-8 characters is
-  signification.  Hence, <b>'a'&nbsp;LIKE&nbsp;'A'</b> returns
-  TRUE but <b>'&aelig;'&nbsp;LIKE&nbsp;'&AElig;'</b> returns FALSE.
-</p></li>
-</ul>
 
 <h2>Documentation</h2>
 
@@ -150,14 +126,6 @@ $ ../sqlite/configure
 $ make                       <i> Builds "sqlite" and "libsqlite.a" </i>
 $ make test                  <i> Optional: run regression tests </i>
 </pre></blockquote>
-
-<p>The Win2K version of SQLite was built using the MingW32 cross-compiler
-running under Linux.  You have to give the configure script hints to make
-this work.  Read the comments at the beginning of the file
-<b>configure.in</b> for additional information.  The source code is
-general enough that it should be possible to compile SQLite using VC++,
-though the author has no desire or motivation to try.
-</p>
 }
 
 puts {<h2>Command-line Usage Example</h2>
index ff95a8a74bd36ad2bd09662f40f3d806498e57cd..0c9c258323ad2c47ca7baee71a866693342f0a2d 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Run this Tcl script to generate the sqlite.html file.
 #
-set rcsid {$Id: lang.tcl,v 1.9 2001/09/20 01:44:44 drh Exp $}
+set rcsid {$Id: lang.tcl,v 1.10 2001/09/28 17:47:14 drh Exp $}
 
 puts {<html>
 <head>
@@ -119,7 +119,7 @@ ROLLBACK [TRANSACTION [<name>]]
 puts {
 <p>Beginning in version 2.0, SQLite supports transactions with
 rollback and atomic commit.  However, only a single level of
-transaction is required.  In other words, transactions
+transaction is allowed.  In other words, transactions
 may not be nested.
 </p>
 
@@ -173,7 +173,7 @@ puts "\"[Operator \\.]\".</p>"
 Section {CREATE INDEX} createindex
 
 Syntax {sql-statement} {
-CREATE INDEX <index-name> 
+CREATE [UNIQUE] INDEX <index-name> 
 ON <table-name> ( <column-name> [, <column-name>]* )
 } {column-name} {
 <name> [ ASC | DESC ]
@@ -191,6 +191,10 @@ implementation.</p>
 <p>There are no arbitrary limits on the number of indices that can be
 attached to a single table, nor on the number of columns in an index.</p>
 
+<p>If the UNIQUE keyword appears between CREATE and INDEX then duplicate
+index entries are not allowed.  Any attempt to insert a duplicate entry
+will result in a rollback and an error message.</p>
+
 <p>The exact text
 of each CREATE INDEX statement is stored in the <b>sqlite_master</b>
 table.  Everytime the database is opened, all CREATE INDEX statements
@@ -234,10 +238,12 @@ is the name of the table that records the database schema.</p>
 <p>Each column definition is the name of the column followed by the
 datatype for that column, then one or more optional column constraints.
 The datatype for the column is ignored.  All information
-is stored as null-terminated strings.  The constraints are also ignored,
-except that the PRIMARY KEY constraint will cause an index to be automatically
-created that implements the primary key and the DEFAULT constraint
-which specifies a default value to use when doing an INSERT.
+is stored as null-terminated strings.
+The UNIQUE constraint causes an index to be created on the specified
+columns.  This index must contain unique keys.  The PRIMARY KEY constraint
+is an alias for UNIQUE.
+The DEFAULT constraint
+specifies a default value to use when doing an INSERT.
 </p>
 
 <p>There are no arbitrary limits on the number