diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\ChangeLog clsql\ChangeLog
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\clsql-allegro-test.lisp clsql\clsql-allegro-test.lisp
--- clsql-3.7.4\clsql-allegro-test.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\clsql-allegro-test.lisp	Tue Oct 10 15:09:25 2006
@@ -0,0 +1,427 @@
+(require '#:asdf)
+(push #p"/dev/uffi/" asdf:*central-registry*)
+(push #p"/dev/clsql/" asdf:*central-registry*)
+(asdf:operate 'asdf:load-op '#:clsql)
+;; (asdf:operate 'asdf:test-op '#:clsql)
+;; (asdf:operate 'asdf:load-op '#:clsql-tests)
+(use-package '#:clsql)
+;(use-package '#:clsql-tests)
+(enable-sql-reader-syntax)
+(clsql:push-library-path "/dev/clsql/")
+;(setf *default-database-type* :odbc)
+(setf *default-database-type* :mysql)
+;(setf *default-database-type* :sqlite3)
+(initialize-database-type)
+;(connect '("pokemon")) ; for SQLite3
+(connect '("localhost" "pokemon" "root" "raistlin")) ; for MySQL
+;(connect '("Pokemon Database" "" "")) ; for ODBC
+
+(if (member "pokemon" (list-tables) :test #'equalp)
+    (drop-table "pokemon"))
+
+(create-table "pokemon" 
+              '(([id] integer :primary-key :not-null) 
+                ([Name] (string 40) :not-null) 
+                ([Type1] (string 15) :not-null) 
+                ([Type2] (string 15) :not-null)
+                ([Ability] (string 30) :not-null)
+                (["Terrain Ability"] (string 30))
+                (["Friend Area"] (string 30))
+                ([HP] integer)
+                ([ATK] integer)
+                ([DEF] integer)
+                (["SP ATK"] integer)
+                (["SP DEF"] integer)
+                ([Size] integer)
+                ([Find] string)
+                (["Find Floor"] string)
+                ([Evolution] string)
+                (["Evolution Level"] string)
+                (["Evolution Condition"] string)))
+
+(insert-records :into [pokemon] :values '(1 "Bulbasaur" "Grass" "Poison" "Overgrow" "Ground" "Beau Plains" 3 3 4 2 4 1 "Joyous Tower" "1-5" "N/A" "N/A" "N/A"))
+(insert-records :into [pokemon] :values '(2 "Ivysaur" "Grass" "Poison" "Overgrow" "Ground" "Beau Plains" 4 4 2 3 1 1 "Western Cave" "19-27" "Bulbasaur" "16" "N/A"))
+(insert-records :into [pokemon] :values '(3 "Venusaur" "Grass" "Poison" "Overgrow" "Ground" "Beau Plains" 4 4 2 4 2 1 "N/A" "N/A" "Ivysaur" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(4 "Charmander" "Fire" "None" "Blaze" "Magma" "Mt. Cleft" 3 4 4 3 4 1 "Fiery Field" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(5 "Charmeleon" "Fire" "None" "Blaze" "Magma" "Mt. Cleft" 3 4 4 3 4 1 "Fiery Field" "26-29" "Charmander" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(6 "Charizard" "Fire" "Flying" "Blaze" "Magma" "Mt. Cleft" 3 4 4 3 4 1 "N/A" "N/A" "Charmeleon" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(7 "Squirtle" "Water" "None" "Torrent" "Water" "Turtleshell Pond" 3 3 4 3 4 1 "Waterfall Pond" "8-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(8 "Wartortle" "Water" "None" "Torrent" "Water" "Turtleshell Pond" 3 3 4 3 4 1 "Northwind Field" "27-29" "Squirtle" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(9 "Blastoise" "Water" "None" "Torrent" "Water" "Turtleshell Pond" 3 3 4 3 4 1 "Western Cave" "89-98" "Wartortle" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(10 "Caterpie" "Bug" "None" "Shield Dust" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Wish Cave" "2-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(11 "Metapod" "Bug" "None" "Shed Skin" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Joyous Tower" "7-8" "Caterpie" "7" "N/A" ))
+(insert-records :into [pokemon] :values '(12 "Butterfree" "Bug" "Flying" "Compoundeyes" "Float" "Mist-Rise Forest" 1 1 1 1 1 1 "N/A" "N/A" "Metapod" "10" "N/A" ))
+(insert-records :into [pokemon] :values '(13 "Weedle" "Bug" "Poison" "Shield Dust" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Silent Chasm" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(14 "Kakuna" "Bug" "Poison" "Shed Skin" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Joyous Tower" "9-13" "Weedle" "7" "N/A" ))
+(insert-records :into [pokemon] :values '(15 "Beedrill" "Bug" "Poison" "Swarm" "Float" "Mist-Rise Forest" 2 1 1 1 1 1 "N/A" "N/A" "Kakuna" "10" "N/A" ))
+(insert-records :into [pokemon] :values '(16 "Pidgey" "Normal" "Flying" "Keen Eye" "Ground" "Flyaway Forest" 1 3 3 3 2 1 "Howling Forest" "9-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(17 "Pidgeotto" "Normal" "Flying" "Keen Eye" "Ground" "Flyaway Forest" 1 3 2 2 1 1 "Mt. Thunder" "2-5" "Pidgey" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(18 "Pidgeot" "Normal" "Flying" "Keen Eye" "Ground" "Flyaway Forest" 2 3 3 3 2 1 "N/A" "N/A" "Pidgeotto" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(19 "Rattata" "Normal" "None" "Run Away/Guts" "Ground" "Wild Plains" 1 2 3 1 2 1 "Thunderwave Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(20 "Raticate" "Normal" "None" "Run Away/Guts" "Ground" "Wild Plains" 3 3 4 3 3 1 "N/A" "N/A" "Rattata" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(21 "Spearow" "Normal" "Flying" "Keen Eye" "Ground" "Ravaged Field" 2 2 3 2 3 1 "Mt. Steel" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(22 "Fearow" "Normal" "Flying" "Keen Eye" "Ground" "Ravaged Field" 1 1 2 1 2 1 "N/A" "N/A" "Spearow" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(23 "Ekans" "Poison" "None" "Intimidate/Shed Skin" "Ground" "Wild Plains" 2 2 2 2 2 1 "Western Cave" "3-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(24 "Arbok" "Poison" "None" "Intimidate/Shed Skin" "Ground" "Wild Plains" 2 3 2 2 3 1 "N/A" "N/A" "Ekans" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(25 "Pikachu" "Electric" "None" "Static" "Ground" "Energetic Forest" 3 4 4 4 4 1 "Lightning Field" "6-10" "Pichu" "N/A" "IQ 6 Stars" ))
+(insert-records :into [pokemon] :values '(26 "Raichu" "Electric" "None" "Static" "Ground" "Energetic Forest" 4 4 4 4 4 1 "N/A" "N/A" "Pikachu" "N/A" "Thunderstone" ))
+(insert-records :into [pokemon] :values '(27 "Sandshrew" "Ground" "None" "Sand Veil" "Ground" "Furnace Desert" 2 3 4 2 3 1 "Magma Cavern" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(28 "Sandslash" "Ground" "None" "Sand Veil" "Ground" "Furnace Desert" 2 3 4 2 3 1 "N/A" "N/A" "Sandshrew" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(29 "Nidoran Female" "Poison" "None" "Poison Point" "Ground" "Safari" 1 1 1 1 2 1 "Thunderwave Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(30 "Nidorina" "Poison" "None" "Poison Point" "Ground" "Safari" 1 1 1 1 2 1 "Lapis Cave" "4-8" "Nidoran Female" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(31 "Nidoqueen" "Poison" "Ground" "Poison Point" "Ground" "Safari" 1 2 2 2 2 1 "N/A" "N/A" "Nidorina" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(32 "Nidoran Male" "Poison" "None" "Poison Point" "Ground" "Safari" 1 1 1 1 1 1 "Mt. Thunder" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(33 "Nidorino" "Poison" "None" "Poison Point" "Ground" "Safari" 1 1 1 1 1 1 "Lapis Cave" "4-8" "Nidoran Male" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(34 "Nidoking" "Poison" "Ground" "Poison Point" "Ground" "Safari" 1 2 2 2 2 1 "N/A" "N/A" "Nidorino" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(35 "Clefairy" "Normal" "None" "Cute Charm" "Ground" "Mt. Moonview" 1 1 2 1 2 1 "Joyous Tower" "9-14" "Cleffa" "N/A" "IQ 6 Stars" ))
+(insert-records :into [pokemon] :values '(36 "Clefable" "Normal" "None" "Cute Charm" "Ground" "Mt. Moonview" 1 2 2 2 2 1 "N/A" "N/A" "Clefairy" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(37 "Vulpix" "Fire" "None" "Flash Fire" "Magma" "Darkness Ridge" 3 3 2 3 2 1 "Fiery Field" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(38 "Ninetails" "Fire" "None" "Flash Fire" "Magma" "Darkness Ridge" 4 2 2 2 2 1 "N/A" "N/A" "Vulpix" "N/A" "Fire Stone" ))
+(insert-records :into [pokemon] :values '(39 "Jigglypuff" "Normal" "None" "Cute Charm" "Ground" "Sky Blue Plains" 3 3 1 2 1 1 "Wish Cave" "1-4" "Igglybuff" "N/A" "IQ 6 Stars" ))
+(insert-records :into [pokemon] :values '(40 "Wigglytuff" "Normal" "None" "Cute Charm" "Ground" "Sky Blue Plains" 3 2 1 3 1 1 "N/A" "N/A" "Jigglypuff" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(41 "Zubat" "Poison" "Flying" "Inner Focus" "Float" "Echo Cave" 1 1 1 1 1 1 "Lapis Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(42 "Golbat" "Poison" "Flying" "Inner Focus" "Float" "Echo Cave" 1 1 1 1 1 1 "Lapis Cave" "11-14" "Zubat" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(43 "Oddish" "Grass" "Poison" "Chlorophyll" "Ground" "Jungle" 2 1 2 1 2 1 "Sinister Woods" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(44 "Gloom" "Grass" "Poison" "Chlorophyll" "Ground" "Jungle" 2 1 1 1 1 1 "Silent Chasm" "1-9" "Oddish" "21" "N/A" ))
+(insert-records :into [pokemon] :values '(45 "Vileplume" "Grass" "Poison" "Chlorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "N/A" "N/A" "Gloom" "N/A" "Leaf Stone" ))
+(insert-records :into [pokemon] :values '(46 "Paras" "Bug" "Grass" "Effect Spore" "Ground" "Mushroom Forest" 2 3 3 3 3 1 "Silent Chasm" "7-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(47 "Parasect" "Bug" "Grass" "Effect Spore" "Ground" "Mushroom Forest" 1 1 2 1 2 1 "N/A" "N/A" "Paras" "24" "N/A" ))
+(insert-records :into [pokemon] :values '(48 "Venonat" "Bug" "Poison" "Compoundeyes" "Ground" "Secretive Forest" 2 1 2 2 2 1 "Uproar Forest" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(49 "Venomoth" "Bug" "Poison" "Shield Dust" "Float" "Secretive Forest" 2 3 2 3 2 1 "N/A" "N/A" "Venonat" "31" "N/A" ))
+(insert-records :into [pokemon] :values '(50 "Diglett" "Ground" "None" "Sand Veil/Arena Trap" "Ground" "Boulder Cave" 2 1 2 1 2 1 "Southern Cave" "-1-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(51 "Dugtrio" "Ground" "None" "Sand Veil/Arena Trap" "Ground" "Boulder Cave" 3 2 2 1 2 1 "N/A" "N/A" "Diglett" "26" "N/A" ))
+(insert-records :into [pokemon] :values '(52 "Meowth" "Normal" "None" "Pickup" "Ground" "Energetic Forest" 3 3 3 3 4 1 "Western Cave" "3-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(53 "Persian" "Normal" "None" "Limber" "Ground" "Energetic Forest" 4 3 3 3 4 1 "N/A" "N/A" "Meowth" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(54 "Psyduck" "Water" "None" "Damp/Cloud Nine" "Water" "Turtleshell Pond" 3 4 4 4 4 1 "Joyous Tower" "9-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(55 "Golduck" "Water" "None" "Damp/Cloud Nine" "Water" "Turtleshell Pond" 4 4 4 4 4 1 "N/A" "N/A" "Psyduck" "33" "N/A" ))
+(insert-records :into [pokemon] :values '(56 "Mankey" "Fighting" "None" "Vital Spirit" "Ground" "Energetic Forest" 1 1 1 1 1 1 "Uproar Forest" "8-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(57 "Primeape" "Fighting" "None" "Vital Spirit" "Ground" "Energetic Forest" 2 1 1 1 1 1 "N/A" "N/A" "Mankey" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(58 "Growlithe" "Fire" "None" "Intimidate/Flash Fire" "Magma" "Scorched Plains" 3 1 2 1 2 1 "Mt. Thunder" "9-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(59 "Arcanine" "Fire" "None" "Intimidate/Flash Fire" "Magma" "Scorched Plains" 3 1 2 1 2 1 "N/A" "N/A" "Growlithe" "N/A" "Fire Stone" ))
+(insert-records :into [pokemon] :values '(60 "Poliwag" "Water" "None" "Water Absorb/Damp" "Water" "Tadpole Pond" 2 1 1 1 1 1 "Silent Chasm" "5-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(61 "Poliwhirl" "Water" "Nonw" "Water Absorb/Damp" "Water" "Tadpole Pond" 2 1 1 1 1 1 "Northwind Field" "10-16" "Poliwag" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(62 "Poliwrath" "Water" "Fighting" "Water Absorb/Damp" "Water" "Tadpole Pond" 2 1 1 1 1 1 "N/A" "N/A" "Poliwhirl" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(63 "Abra" "Psychic" "None" "Synchronize/Inner Focus" "Float" "Decrepit Lab" 1 1 3 1 3 1 "Buried Relic" "10  20  30" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(64 "Kadabra" "Psychic" "None" "Synchronize/Inner Focus" "Ground" "Decrepit Lab" 1 1 1 1 1 1 "Buried Relic" "40-49" "Abra" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(65 "Alakazam" "Psychic" "None" "Synchronize/Inner Focus" "Ground" "Decrepit Lab" 1 1 1 1 1 1 "N/A" "N/A" "Kadabra" "N/A" "Link Cable" ))
+(insert-records :into [pokemon] :values '(66 "Machop" "Fighting" "None" "Guts" "Ground" "Mt. Discipline" 3 3 3 3 4 1 "Buried Relic" "4-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(67 "Machoke" "Fighting" "None" "Guts" "Ground" "Mt. Discipline" 3 3 3 3 4 1 "Buried Relic" "80-87" "Machop" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(68 "Machamp" "Fighting" "None" "Guts" "Ground" "Mt. Discipline" 4 3 3 3 4 1 "N/A" "N/A" "Machoke" "N/A" "Link Cable" ))
+(insert-records :into [pokemon] :values '(69 "Bellsprout" "Grass" "Poison" "Clorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "Wish Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(70 "Weepinbell" "Grass" "Poison" "Clorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "N/A" "N/A" "Bellsprout" "21" "N/A" ))
+(insert-records :into [pokemon] :values '(71 "Victreebel" "Grass" "Poison" "Clorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "N/A" "N/A" "Weepinbell" "N/A" "Leaf Stone" ))
+(insert-records :into [pokemon] :values '(72 "Tentacool" "Water" "Poison" "Clear Body/Liquid Ooze" "Water" "Bountiful Sea" 2 2 2 2 2 1 "Stormy Sea" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(73 "Tentacruel" "Water" "Poison" "Clear Body/Liquid Ooze" "Water" "Bountiful Sea" 2 2 1 1 1 1 "Stormy Sea" "31-39" "Tentacool" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(74 "Geodude" "Rock" "Ground" "Rock Head/Sturdy" "Ground" "Mt. Deepgreen" 3 3 3 3 3 1 "Mt. Steel" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(75 "Graveler" "Rock" "Ground" "Rock Head/Sturdy" "Ground" "Mt. Deepgreen" 2 3 2 3 2 1 "Magma Cavern" "5-10" "Geodude" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(76 "Golem" "Rock" "Ground" "Rock Head/Sturdy" "Ground" "Mt. Deepgreen" 2 3 2 3 2 1 "Magma Cavern" "15-20" "Graveler" "N/A" "Link Cable" ))
+(insert-records :into [pokemon] :values '(77 "Ponyta" "Fire" "None" "Run Away/Flash Fire" "Magma" "Scorched Plains" 1 1 1 1 1 1 "Joyous Tower" "57-59" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(78 "Rapidash" "Fire" "None" "Run Away/Flash Fire" "Magma" "Scorched Plains" 2 3 2 3 2 1 "N/A" "N/A" "Ponyta" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(79 "Slowpoke" "Water" "Psychic" "Oblivious/Own Tempo" "Water" "Bountiful Sea" 2 4 4 3 3 1 "Stormy Sea" "11-19" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(80 "Slowbro" "Water" "Psychic" "Oblivious/Own Tempo" "Water" "Bountiful Sea" 3 4 4 3 3 1 "N/A" "N/A" "Slowpoke" "37" "N/A" ))
+(insert-records :into [pokemon] :values '(81 "Magnemite" "Electric" "Steel" "Magnet Pull/Sturdy" "Float" "Power Plant" 4 3 3 2 3 1 "Lightning Field" "1-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(82 "Magneton" "Electric" "Steel" "Magnet Pull/Sturdy" "Float" "Power Plant" 3 2 2 2 2 1 "N/A" "N/A" "Magnemite" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(83 "Farfetch'd" "Normal" "Flying" "Keen Eye/Inner Focus" "Ground" "Wild Plains" 2 2 2 1 3 1 "Silent Chasm" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(84 "Doduo" "Normal" "Flying" "Run Away/Early Bird" "Ground" "Safari" 3 2 2 1 3 1 "Great Canyon" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(85 "Dodrio" "Normal" "Flying" "Run Away/Early Bird" "Ground" "Safari" 2 3 1 2 2 1 "N/A" "N/A" "Doduo" "31" "N/A" ))
+(insert-records :into [pokemon] :values '(86 "Seel" "Water" "None" "Thick Fat" "Water" "Ice Floe Beach" 2 3 4 2 3 1 "Mt. Freeze" "3-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(87 "Dewgong" "Water" "Ice" "Thick Fat" "Water" "Ice Floe Beach" 3 4 3 3 2 1 "N/A" "N/A" "Seel" "34" "N/A" ))
+(insert-records :into [pokemon] :values '(88 "Grimer" "Poison" "None" "Stench/Sticky Hold" "Ground" "Poison Swamp" 2 1 2 1 2 1 "Magma Cavern" "15-21" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(89 "Muk" "Poison" "None" "Stench/Sticky Hold" "Ground" "Poison Swamp" 2 3 2 2 2 1 "N/A" "N/A" "Grimer" "38" "N/A" ))
+(insert-records :into [pokemon] :values '(90 "Shellder" "Water" "None" "Shell Armor" "Water" "Bountiful Sea" 3 3 2 2 2 1 "Stormy Sea" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(91 "Cloyster" "Water" "Ice" "Shell Armor" "Water" "Bountiful Sea" 3 4 3 3 2 1 "N/A" "N/A" "Shellder" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(92 "Gastly" "Ghost" "Poison" "Levitate" "Wall" "Darkness Ridge" 3 2 2 2 2 1 "Buried Relic" "9-14" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(93 "Haunter" "Ghost" "Poison" "Levitate" "Wall" "Darkness Ridge" 3 3 3 3 3 1 "Buried Relic" "82-93" "Gastly" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(94 "Gengar" "Ghost" "Poison" "Levitate" "Wall" "Darkness Ridge" 3 2 3 2 3 1 "N/A" "N/A" "Haunter" "N/A" "Link Cable" ))
+(insert-records :into [pokemon] :values '(95 "Onix" "Rock" "Ground" "Rock Head/Sturdy" "Ground" "Boulder Cave" 2 3 1 2 1 4 "Magma Cavern" "21-23" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(96 "Drowzee" "Psychic" "None" "Insomnia" "Ground" "Wild Plains" 1 1 1 1 1 1 "Buried Relic" "9-14" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(97 "Hypno" "Psychic" "None" "Insomnia" "Ground" "Wild Plains" 1 3 1 2 1 1 "N/A" "N/A" "Drowzee" "26" "N/A" ))
+(insert-records :into [pokemon] :values '(98 "Krabby" "Water" "None" "Hyper Cutter/Shell Armor" "Water" "Shallow Beach" 3 4 3 3 3 1 "Silver Trench" "15-24" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(99 "Kingler" "Water" "None" "Hyper Cutter/Shell Armor" "Water" "Shallow Beach" 4 4 3 3 4 1 "N/A" "N/A" "Krabby" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(100 "Voltorb" "Electric" "None" "Soundproof/Static" "Ground" "Power Plant" 2 2 3 3 3 1 "Thunderwave Cave" "3-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(101 "Electrode" "Electric`" "None" "Soundproof/Static" "Ground" "Power Plant" 3 3 3 3 2 1 "N/A" "N/A" "Voltorb" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(102 "Exeggcute" "Grass" "Psychic" "Chlorophyll" "Ground" "Jungle" 2 2 3 2 3 1 "Howling Forest" "14" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(103 "Exeggutor" "Grass" "Psychic" "Chlorophyll" "Ground" "Jungle" 2 3 1 2 1 1 "N/A" "N/A" "Exeggcute" "N/A" "Leaf Stone" ))
+(insert-records :into [pokemon] :values '(104 "Cubone" "Ground" "None" "Rock Head/Lightningrod" "Ground" "Mt. Deepgreen" 3 3 3 3 4 1 "Southern Cavern" "5-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(105 "Marowak" "Ground" "None" "Rock Head/Lightningrod" "Ground" "Mt. Deepgreen" 3 3 3 3 4 1 "N/A" "N/A" "Cubone" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(106 "Hitmonlee" "Fighting" "None" "Limber" "Ground" "Mt. Discipline" 1 1 1 1 1 1 "N/A" "N/A" "Tyrogue" "20" "ATK higher than DEF" ))
+(insert-records :into [pokemon] :values '(107 "Hitmonchan" "Fighting" "None" "Keen Eye" "Ground" "Mt. Discipline" 1 1 1 1 1 1 "N/A" "N/A" "Tyrogue" "20" "DEF higher that ATK" ))
+(insert-records :into [pokemon] :values '(108 "Lickitung" "Normal" "None" "Own Tempo" "Ground" "Sky Blue Plains" 3 1 1 1 1 1 "Western Cave" "37-44" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(109 "Koffing" "Poison" "None" "Levitate" "Float" "Poison Swamp" 1 1 1 1 1 1 "Sky Tower" "9-16" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(110 "Weezing" "Poison" "None" "Levitate" "Float" "Poison Swamp" 1 2 1 2 1 1 "N/A" "N/A" "Koffing" "35" "N/A" ))
+(insert-records :into [pokemon] :values '(111 "Rhyhorn" "Ground" "Rock" "Lightningrod/Rock Head" "Ground" "Safari" 2 1 3 1 2 1 "Frosty Grotto" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(112 "Rhydon" "Ground" "Rock" "Lightningrog/Rock Head" "Ground" "Safari" 3 3 3 3 2 1 "N/A" "N/A" "Rhyhorn" "42" "N/A" ))
+(insert-records :into [pokemon] :values '(113 "Chansey" "Normal" "None" "Natural Cure/Serene Grace" "Ground" "Sky Blue Plains" 1 1 1 1 1 1 "Joyous Tower" "50  60  77" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(114 "Tangela" "Grass" "None" "Chlorophyll" "Ground" "Jungle" 3 3 2 3 3 1 "Lapis Cave" "9-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(115 "Kangaskhan" "Normal" "None" "Early Bird" "Ground" "Safari" 3 2 3 3 3 1 "Western Cave" "13-19" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(116 "Horsea" "Water" "None" "Swift Swim" "Water" "Treasure Sea" 3 2 2 2 2 1 "Silver Trench" "10-20" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(117 "Seadra" "Water" "None" "Poison Point" "Water" "Treasure Sea" 3 3 2 3 3 1 "Stormy Sea" "30-39" "Horsea" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(118 "Goldeen" "Water" "None" "Swift Swim/Water Veil" "Water" "Rub-a-Dub River" 1 3 4 2 3 1 "Waterfall Pond" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(119 "Seaking" "Water" "None" "Swift Swim/Water Veil" "Water" "Rub-a-Dub River" 1 4 4 3 3 1 "N/A" "N/A" "Goldeen" "33" "N/A" ))
+(insert-records :into [pokemon] :values '(120 "Staryu" "Water" "None" "Illuminate/Natural Cure" "Water" "Bountiful Sea" 3 3 2 2 2 1 "Silver Trench" "15-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(121 "Starmie" "Water" "None" "Illumnate/Natural Cure" "Water" "Bountiful Sea" 3 3 2 3 3 1 "N/A" "N/A" "Staryu" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(122 "Mr. Mime" "Psychic" "None" "Soundproof" "Ground" "Decrepit Lab" 4 3 4 3 4 1 "Solar Cave" "7-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(123 "Scyther" "Bug" "Flying" "Swarm" "Ground" "Overgrown Forest" 2 2 3 2 3 1 "Sinister Woods" "8-11" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(124 "Jynx" "Ice" "Psychic" "Oblivious" "Ground" "Frigid Cavern" 2 2 1 1 1 1 "N/A" "N/A" "Smoochum" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(125 "Electabuzz" "Electric" "None" "Static" "Ground" "Power Plant" 1 3 2 2 1 1 "N/A" "N/A" "Elekid" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(126 "Magmar" "Fire" "None" "Flame Body" "Magma" "Crater" 3 3 3 4 3 1 "N/A" "N/A" "Magby" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(127 "Pinsir" "Bug" "None" "Hyper Cutter" "Ground" "Overgrown Forest" 4 3 4 3 4 1 "Mt. Steel" "7-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(128 "Tauros" "Normal" "None" "Intimidate" "Ground" "Safari" 4 3 3 3 4 1 "Great Canyon" "10-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(129 "Magikarp" "Water" "None" "Swift Swim" "Water" "Waterfall Lake" 1 1 1 1 1 1 "Waterfall Pond" "7-11  Blue Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(130 "Gyarados" "Water" "Flying" "Intimidate" "Float" "Waterfall Lake" 4 2 3 2 3 4 "N/A" "N/A" "Magikarp" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(131 "Lapras" "Water" "Ice" "Water Absorb/Shell Armor" "Water" "Mystic Lake" 3 3 4 3 4 4 "Farr-off Sea" "45-50  Blue Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(132 "Ditto" "Normal" "None" "Limber" "Ground" "Decrepit Lab" 2 1 2 1 2 1 "Frosty Forest" "4-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(133 "Eevee" "Normal" "None" "Run Away" "Ground" "Transform Forest" 3 4 4 4 4 1 "Joyous Tower" "12-17" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(134 "Vaporeon" "Water" "None" "Water Absorb" "Water" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(135 "Jolteon" "Electric" "None" "Volt Absorb" "Ground" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Thunderstone" ))
+(insert-records :into [pokemon] :values '(136 "Flareon" "Fire" "None" "Flash Fire" "Magma" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Fire Stone" ))
+(insert-records :into [pokemon] :values '(137 "Porygon" "Normal" "None" "Trace" "Water" "Decrepit Lab" 1 1 2 4 1 1 "Buried Relic" "5-10  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(138 "Omanyte" "Rock" "Water" "Swift Swim/Shell Armor" "Water" "Deep-Sea Floor" 2 2 2 2 2 1 "Stormy Sea" "1-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(139 "Omastar" "Rock" "Water" "Swift Swim/Shell Armor" "Water" "Deep-Sea Floor" 3 3 2 2 2 1 "N/A" "N/A" "Omanyte" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(140 "Kabuto" "Rock" "Water" "Swift Swim/Battle Armor" "Water" "Deep-Sea Floor" 3 4 4 3 3 1 "Silver Trench" "5-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(141 "Kabutops" "Rock" "Water" "Swift Swim/Battle Armor" "Water" "Deep-Sea Floor" 3 4 4 3 3 1 "N/A" "N/A" "Kabuto" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(142 "Aerodactyl" "Rock" "Flying" "Rock Head/Pressure" "Float" "Ancient Relic" 4 3 4 3 4 1 "Sky Tower" "21-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(143 "Snorlax" "Normal" "None" "Immunity/Thick Fat" "Ground" "Energetic Forest" 3 4 4 4 4 1 "Howling Forest" "11-14" "Munchlax" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(144 "Articuno" "Ice" "Flying" "Pressure" "Float" "Legendary Island" 3 2 2 2 2 4 "Frosty Grotto" "5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(145 "Zapdos" "Electric" "Flying" "Pressure" "Float" "Legendary Island" 3 2 2 2 2 4 "Mt. Thunder Peak" "3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(146 "Moltres" "Fire" "Flying" "Pressure" "Float" "Legendary Island" 3 2 2 2 2 4 "Mt. Blaze Peak" "3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(147 "Dratini" "Dragon" "None" "Shed Skin" "Water" "Mystic Lake" 3 2 2 1 2 1 "Silver Trench" "50-59" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(148 "Dragonair" "Dragon" "None" "Shed Skin" "Water" "Mystic Lake" 3 3 3 2 2 1 "Wyvern Hill" "12-20" "Dratini" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(149 "Dragonite" "Dragon" "Flying" "Inner Focus" "Water" "Mystic Lake" 4 4 3 3 3 4 "N/A" "N/A" "Dragonair" "55" "N/A" ))
+(insert-records :into [pokemon] :values '(150 "Mewtwo" "Psychic" "None" "Pressure" "Ground" "Cryptic Cave" 4 3 2 3 4 1 "Western Cave" "99" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(151 "Mew" "Psychic" "None" "Synchronize" "Float" "Final Island" 4 2 3 2 3 1 "Buried Relic" "36-98" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(152 "Chikorita" "Grass" "None" "Overgrow" "Ground" "Beau Plains" 3 4 4 4 4 1 "Joyous Tower" "8-11" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(153 "Bayleef" "Grass" "None" "Overgrow" "Ground" "Beau Plains" 4 4 4 4 4 1 "Western Cave" "20-27" "Chikorita" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(154 "Meganium" "Grass" "None" "Overgrow" "Ground" "Beau Plains" 4 4 4 4 4 1 "N/A" "N/A" "Bayleef" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(155 "Cyndaquil" "Fire" "None" "Blaze" "Magma" "Scorched Plains" 3 3 4 3 4 1 "Joyous Tower" "13-17" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(156 "Quilava" "Fire" "None" "Blaze" "Magma" "Scorched Plains" 4 3 4 3 4 1 "Fiery Field" "15-24" "Cyndaquil" "14" "N/A" ))
+(insert-records :into [pokemon] :values '(157 "Typhlosion" "Fire" "None" "Blaze" "Magma" "Scorched Plains" 4 3 4 3 4 1 "N/A" "N/A" "Quilava" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(158 "Totodile" "Water" "None" "Torrent" "Water" "Rub-a-Dub River" 3 3 3 3 4 1 "Waterfall Pond" "6-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(159 "Croconaw" "Water" "None" "Torrent" "Water" "Rub-a-Dub River" 4 3 3 3 4 1 "Northwind Field" "27-29" "Totodile" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(160 "Feraligatr" "Water" "None" "Torrent" "Water" "Rub-a-Dub River" 4 3 3 3 4 1 "Western Cave" "49-58" "Croconaw" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(161 "Sentret" "Normal" "None" "Run Away/Keen Eye" "Ground" "Thunder Meadow" 1 2 3 1 2 1 "Sinister Woods" "3-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(162 "Furret" "Normal" "None" "Run Away/Keen Eye" "Ground" "Thunder Meadow" 1 3 3 2 2 1 "N/A" "N/A" "Sentret" "15" "N/A" ))
+(insert-records :into [pokemon] :values '(163 "Hoothoot" "Normal" "Flying" "Insomnia/Keen Eye" "Ground" "Flyaway Forest" 2 2 3 2 3 1 "Sinister Woods" "10-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(164 "Noctowl" "Normal" "Flying" "Insomnia/Keen Eye" "Ground" "Flyaway Forest" 2 3 3 3 4 1 "N/A" "N/A" "Hoothoot" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(165 "Ladyba" "Bug" "Flying" "Swarm/Early Bird" "Float" "Mist-Rise Forest" 2 3 3 3 3 1 "Sinister Woods" "7-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(166 "Ledian" "Bug" "Flying" "Swarm/Early Bird" "Float" "Mist-Rise Forest" 1 3 2 3 2 1 "N/A" "N/A" "Ladyba" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(167 "Spinarak" "Bug" "Poison" "Swarm/Insomnia" "Ground" "Secretive Forest" 2 2 2 1 3 1 "Silent Chasm" "6-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(168 "Ariados" "Bug" "Poison" "Swarm/Insomnia" "Ground" "Secretive Forest" 2 3 3 3 3 1 "N/A" "N/A" "Spinarak" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(169 "Crobat" "Poison" "Flying" "Inner Focus" "Float" "Echo Cave" 3 3 3 2 3 1 "N/A" "N/A" "Golbat" "N/A" "IQ 5 Stars" ))
+(insert-records :into [pokemon] :values '(170 "Chinchou" "Water" "Electric" "Volt Absorb/Illuminate" "Water" "Deep-Sea Floor" 3 3 2 2 3 1 "Silver Trench" "70-79" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(171 "Lanturn" "Water" "Electric" "Volt Absorb/Illuminate" "Water" "Deep-Sea Floor" 3 3 2 3 3 1 "N/A" "N/A" "Chinchou" "27" "N/A" ))
+(insert-records :into [pokemon] :values '(172 "Pichu" "Electric" "None" "Static" "Ground" "Energetic Forest" 1 4 4 4 4 1 "Joyous Tower" "3-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(173 "Cleffa" "Normal" "None" "Cute Charm" "Ground" "Mt. Moonview" 1 1 1 1 1 1 "Wish Cave" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(174 "Igglybuff" "Normal" "None" "Cute Charm" "Ground" "Sky Blue Plains" 2 2 2 2 3 1 "Western Cave" "10-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(175 "Togepi" "Normal" "None" "Hustle/Serene Grace" "Ground" "Flyaway Forest" 1 1 1 1 1 1 "Wish Cave" "5-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(176 "Togetic" "Normal" "Flying" "Hustle/Serene Grace" "Ground" "Flyaway Forest" 2 3 3 3 3 1 "N/A" "N/A" "Togepi" "N/A" "IQ 5 Stars" ))
+(insert-records :into [pokemon] :values '(177 "Natu" "Psychic" "Flying" "Synchronize/Early Bird" "Ground" "Flyaway Forest" 2 3 2 3 2 1 "Solar Cave" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(178 "Xatu" "Psychic" "Flying" "Syncronize/Early Bird" "Ground" "Flyaway Forest" 4 3 4 3 4 1 "N/A" "N/A" "Natu" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(179 "Mareep" "Electric" "None" "Static" "Ground" "Thunder Meadow" 3 3 3 3 3 1 "Lightning Field" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(180 "Flaaffy" "Electric" "None" "Static" "Ground" "Thunder Meadow" 3 3 3 3 2 1 "Lightning Field" "7-13" "Mareep" "15" "N/A" ))
+(insert-records :into [pokemon] :values '(181 "Ampharos" "Electric" "None" "Static" "Ground" "Thunder Meadow" 3 3 3 4 3 1 "N/A" "N/A" "Flaffy" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(182 "Bellossom" "Grass" "None" "Chlorophyll" "Ground" "Jungle" 3 3 3 3 3 1 "N/A" "N/A" "Gloom" "N/A" "Sun Stone" ))
+(insert-records :into [pokemon] :values '(183 "Marill" "Water" "None" "Thick Fat/Huge Power" "Water" "Turtleshell Pond" 1 1 1 1 1 1 "Wish Cave" "4-6" "Azurill" "N/A" "IQ 6 Stars" ))
+(insert-records :into [pokemon] :values '(184 "Azumarill" "Water" "None" "Thick Fat/Huge Power" "Water" "Turtleshell Pond" 3 3 3 3 3 1 "N/A" "N/A" "Marill" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(185 "Sudowoodo" "Rock" "None" "Sturdy/Rock Head" "Ground" "Overgrown Forest" 3 2 3 2 4 1 "Sinister Woods" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(186 "Politoed" "Water" "None" "Water Absorb/Damp" "Water" "Tadpole Pond" 3 3 2 4 2 1 "N/A" "N/A" "Poliwhirl" "N/A" "King's Rock  Link Cable" ))
+(insert-records :into [pokemon] :values '(187 "Hoppip" "Grass" "Flying" "Chlorophyll" "Ground" "Beau Plains" 2 3 3 2 3 1 "Pitfall Valley" "4-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(188 "Skiploom" "Grass" "Flying" "Chlorophyll" "Ground" "Beau Plains" 2 3 3 2 3 1 "Great Canyon" "1-3" "Hoppip" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(189 "Jumpluff" "Grass" "Flying" "Chlorophyll" "Ground" "Beau Plains" 2 3 2 3 2 1 "N/A" "N/A" "Skiploom" "27" "N/A" ))
+(insert-records :into [pokemon] :values '(190 "Aipom" "Normal" "None" "Run Away/Pickup" "Ground" "Energetic Forest" 1 2 2 2 1 1 "Uproar Forest" "1-6  Blue Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(191 "Sunkern" "Grass" "None" "Chlorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "Wish Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(192 "Sunflora" "Grass" "None" "Chlorophyll" "Ground" "Jungle" 1 2 1 2 1 1 "N/A" "N/A" "Sunkern" "N/A" "Sun Stone" ))
+(insert-records :into [pokemon] :values '(193 "Yanma" "Bug" "Flying" "Speed Boost/Compundeyes" "Float" "Mist-Rise Forest" 4 3 4 3 4 1 "Silent Chasm" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(194 "Wooper" "Water" "Ground" "Damp/Water Absorb" "Water" "Peanut Swamp" 1 2 2 1 2 1 "Sinister Woods" "8-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(195 "Quagsire" "Water" "Ground" "Damp/Water Absorb" "Water" "Peanut Swamp" 2 3 2 3 2 1 "N/A" "N/A" "Wooper" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(196 "Espeon" "Psychic" "None" "Synchronize" "Ground" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Sun Ribbon  IQ 4 Stars" ))
+(insert-records :into [pokemon] :values '(197 "Umbreon" "Dark" "None" "Synchronize" "Ground" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Lunar Ribbon  IQ 4 Stars" ))
+(insert-records :into [pokemon] :values '(198 "Murkrow" "Dark" "Flying" "Insomnia" "Ground" "Flyaway Forest" 2 1 2 1 2 1 "Great Canyon" "5-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(199 "Slowking" "Water" "Psychic" "Oblivious/Own Tempo" "Water" "Bountiful Sea" 4 4 3 4 4 1 "N/A" "N/A" "Slowpoke" "N/A" "King's Rock  Link Cable" ))
+(insert-records :into [pokemon] :values '(200 "Misdreavus" "Ghost" "None" "Levitate" "Wall" "Darkness Ridge" 3 3 3 3 3 1 "Murky Cave" "13-19" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(201 "Unown" "Psychic" "None" "Levitate" "Float" "Aged Chamber AN/O?" 4 4 3 4 3 1 "Unown Relic" "N/A" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(202 "Wobbuffet" "Psychic" "None" "Shadow Tag" "Ground" "Echo Cave" 2 4 2 3 2 1 "N/A" "N/A" "Wynaut" "15" "N/A" ))
+(insert-records :into [pokemon] :values '(203 "Girafarig" "Normal" "Psychic" "Focus/Early Bird" "Ground" "Sky Blue Plains" 3 3 3 3 4 1 "Solar Cave" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(204 "Pineco" "Bug" "None" "Sturdy" "Ground" "Secretive Forest" 1 2 2 1 1 1 "Mt. Freeze" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(205 "Forretress" "Bug" "Steel" "Sturdy" "Ground" "Cryptic Forest" 1 2 2 1 1 1 "N/A" "N/A" "Pineco" "31" "N/A" ))
+(insert-records :into [pokemon] :values '(206 "Dunsparce" "Normal" "None" "Serene Grace/Run Away" "Ground" "Echo Cave" 1 1 1 1 1 1 "Great Canyon" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(207 "Gligar" "Ground" "Flying" "Hyper Cutter/Sand Veil" "Float" "Mt. Deepgreen" 4 3 4 3 4 1 "Mt. Thunder" "7-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(208 "Steelix" "Steel" "Ground" "Rock Head/Sturdy" "Ground" "Boulder Cave" 4 3 3 2 2 4 "N/A" "N/A" "Onix" "N/A" "Metal Coat  Link Cable" ))
+(insert-records :into [pokemon] :values '(209 "Snubbull" "Normal" "None" "Intimidate/Run Away" "Ground" "Sky Blue Plains" 2 2 2 2 2 1 "Western Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(210 "Granbull" "Normal" "None" "Intimidate" "Ground" "Sky Blue Plains" 2 3 2 2 2 1 "N/A" "N/A" "Snubbull" "23" "N/A" ))
+(insert-records :into [pokemon] :values '(211 "Qwilfish" "Water" "Poison" "Poison Point/Swift Swim" "Water" "Serene Sea" 2 3 2 3 2 1 "Silver Trench" "1-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(212 "Scizor" "Bug" "Steel" "Swarm" "Ground" "Overgrown Forest" 2 3 1 2 1 1 "N/A" "N/A" "Scyther" "N/A" "Metal Coat  Link Cable" ))
+(insert-records :into [pokemon] :values '(213 "Shuckle" "Bug" "Rock" "Sturdy" "Ground" "Mt. Deepgreen" 3 2 3 2 3 1 "Mt. Blaze" "5-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(214 "Heracross" "Bug" "Fighting" "Swarm/Guts" "Ground" "Overgrown Forest" 1 1 1 1 1 1 "Great Canyon" "7-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(215 "Sneasel" "Dark" "Ice" "Inner Focus/Keen Eye" "Ground" "Darkness Ridge" 2 4 4 4 4 1 "Buried Relic" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(216 "Teddiursa" "Normal" "None" "Pickup" "Ground" "Mt. Deepgreen" 1 1 1 1 1 1 "Silent Chasm" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(217 "Ursaring" "Normal" "None" "Guts" "Ground" "Mt. Deepgreen" 3 3 3 3 3 1 "N/A" "N/A" "Teddiursa" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(218 "Slugma" "Fire" "None" "Magma Armor/Flame Body" "Magma" "Crater" 3 2 3 3 3 1 "Mt. Blaze" "1-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(219 "Magcargo" "Fire" "Rock" "Magma Armor/Flam Body" "Magma" "Crater" 3 3 2 3 2 1 "N/A" "N/A" "Slugma" "38" "N/A" ))
+(insert-records :into [pokemon] :values '(220 "Swinub" "Ice" "Ground" "Oblivious" "Ground" "Frigid Cavern" 1 1 1 1 1 1 "Sinister Woods" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(221 "Piloswine" "Ice" "Ground" "Oblivious" "Ground" "Frigid Cavern" 1 1 1 1 1 1 "N/A" "N/A" "Swinub" "33" "N/A" ))
+(insert-records :into [pokemon] :values '(222 "Corsola" "Water" "Rock" "Hustle/Natural Cure" "Water" "Shallow Beach" 3 3 2 2 2 1 "Silver Trench" "5-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(223 "Remoraid" "Water" "None" "Hustle" "Water" "Treasure Sea" 3 2 3 1 3 1 "Silver Trench" "50-59" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(224 "Octillery" "Water" "None" "Suction Cups" "Water" "Treasure Sea" 3 3 2 2 2 1 "Silver Trench" "60-69" "Remoraid" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(225 "Delibird" "Ice" "Flying" "Vital Spirit/Hustle" "Ground" "Frigid Cavern" 4 3 4 3 4 1 "Northwind Field" "17-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(226 "Mantine" "Water" "Flying" "Swift Swim/Water Absorb" "Float" "Serene Sea" 4 4 4 4 4 2 "Grand Sea" "30  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(227 "Skarmory" "Steel" "Flying" "Keen Eye/Sturdy" "Ground" "Ravaged Field" 3 1 2 2 2 1 "Western Cave" "40-49" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(228 "Houndour" "Dark" "Fire" "Early Bird/Flash Fire" "Magma" "Ravaged Field" 2 1 2 1 2 1 "Silent Chasm" "5-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(229 "Houndoom" "Dark" "Fire" "Early Bird/Flash Fire" "Magma" "Ravaged Field" 2 2 2 2 2 1 "N/A" "N/A" "Houndour" "24" "N/A" ))
+(insert-records :into [pokemon] :values '(230 "Kingdra" "Water" "Dragon" "Swift Swim" "Water" "Treasure Sea" 4 3 2 3 2 1 "N/A" "N/A" "Seadra" "N/A" "Dragon Scale  Link Cable" ))
+(insert-records :into [pokemon] :values '(231 "Phanpy" "Ground" "None" "Pickup" "Ground" "Safari" 2 2 3 1 3 1 "Great Canyon" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(232 "Donphan" "Ground" "None" "Sturdy" "Ground" "Safari" 2 2 2 2 1 1 "N/A" "N/A" "Phanpy" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(233 "Porygon2" "Normal" "None" "Trace" "Water" "Decrepit Lab" 2 3 1 3 1 1 "Wish Cave" "79-84" "Porygon" "N/A" "Upgrade  Link Cable" ))
+(insert-records :into [pokemon] :values '(234 "Stantler" "Normal" "None" "Intimidate" "Ground" "Energetic Forest" 1 2 2 2 2 1 "Mt. Thunder" "5-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(235 "Smeargle" "Normal" "None" "Own Tempo" "Ground" "Sky Blue Plains" 2 3 2 2 2 1 "Rescue  Howling Forest" "15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(236 "Tyrogue" "Fighting" "None" "Guts" "Ground" "Mt. Discipline" 1 1 1 1 1 1 "Mt. Steel" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(237 "Hitmontop" "Fighting" "None" "Intimidate" "Ground" "Mt. Discipline" 2 3 2 3 2 1 "N/A" "N/A" "Tyrogue" "20" "ATK and DEF equal" ))
+(insert-records :into [pokemon] :values '(238 "Smoochum" "Ice" "Psychic" "Oblivious" "Ground" "Frigid Cavern" 2 3 2 3 2 1 "Joyous Tower" "21-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(239 "Elekid" "Electric" "None" "Static" "Ground" "Power Plant" 3 2 3 3 3 1 "Thunderwave Cave" "4-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(240 "Magby" "Fire" "None" "Flame Body" "Magma" "Crater" 3 2 2 2 2 1 "Mt. Blaze" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(241 "Miltank" "Normal" "None" "Thick Fat" "Ground" "Safari" 4 3 3 3 3 1 "Western Cave" "10  20  30  40  50-53  60-98" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(242 "Blissy" "Normal" "None" "Natural Cure/Serene Grace" "Ground" "Sky Blue Plains" 2 3 2 1 1 1 "N/A" "N/A" "Chansey" "N/A" "IQ 5 Stars" ))
+(insert-records :into [pokemon] :values '(243 "Raikou" "Electric" "None" "Pressure" "Ground" "Sacred Field" 3 3 4 4 4 1 "Lightning Field" "30" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(244 "Entei" "Fire" "None" "Pressure" "Magma" "Sacred Field" 3 4 4 4 4 1 "Fiery Field" "30" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(245 "Suicune" "Water" "None" "Pressure" "Water" "Sacred Field" 4 3 4 3 4 1 "Northwind Field" "30" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(246 "Larvitar" "Rock" "Ground" "Guts" "Ground" "Mt. Cleft" 2 2 2 1 2 1 "Southern Cavern" "16-26" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(247 "Pupitar" "Rock" "Ground" "Shed Skin" "Ground" "Mt. Cleft" 2 2 3 1 2 1 "Mt. Freeze" "3-5" "Larvitar" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(248 "Tyranitar" "Rock" "Dark" "Sand Stream" "Ground" "Mt. Cleft" 2 1 1 1 1 1 "N/A" "N/A" "Pupitar" "55" "N/A" ))
+(insert-records :into [pokemon] :values '(249 "Lugia" "Psychic" "Flying" "Pressure" "Water" "Deep-Sea Current" 4 3 4 3 4 4 "Silver Trench" "99" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(250 "Ho-Oh" "Fire" "Flying" "Pressure" "Float" "Rainbow Peak" 4 4 3 4 4 4 "Mt. Faraway" "40" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(251 "Celebi" "Psychic" "Grass" "Natural Cure" "Float" "Healing Forest" 3 2 2 2 2 1 "Purity Forest" "99" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(252 "Treeko" "Grass" "None" "Overgrow" "Ground" "Overgrown Forest" 2 4 4 4 4 1 "Joyous Tower" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(253 "Grovyle" "Grass" "None" "Overgrow" "Ground" "Overgrown Forest" 3 4 4 4 4 1 "Western Cave" "38-49" "Treeko" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(254 "Sceptile" "Grass" "None" "Overgrow" "Ground" "Overgrown Forest" 4 4 4 4 4 1 "N/A" "N/A" "Grovyle" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(255 "Torchic" "Fire" "None" "Blaze" "Magma" "Scorched Plains" 3 4 3 4 4 1 "Joyous Tower" "11-15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(256 "Combusken" "Fire" "Fighting" "Blaze" "Magma" "Scorched Plains" 4 3 3 4 3 1 "Fiery Field" "22-29" "Torchic" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(257 "Blaziken" "Fire" "Fighting" "Blaze" "Magma" "Scorched Plains" 4 3 3 4 3 1 "N/A" "N/A" "Combusken" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(258 "Mudkip" "Water" "None" "Torrent" "Water" "Peanut Swamp" 3 3 4 4 4 1 "Waterfall Pond" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(259 "Marshtomp" "Water" "Ground" "Torrent" "Water" "Peanut Swamp" 3 3 3 3 3 1 "Mt. Faraway" "10-19" "Mudkip" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(260 "Swampert" "Water" "Ground" "Torrent" "Water" "Peanut Swamp" 4 3 3 3 3 1 "West Cave" "79-88" "Marshtomp" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(261 "Poochyena" "Dark" "None" "Run Away" "Ground" "Wild Plains" 1 1 3 2 3 1 "Thunderwave Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(262 "Mightyena" "Dark" "None" "Intimidate" "Ground" "Wild Plains" 1 1 2 1 2 1 "N/A" "N/A" "Poochyena" "Level 18" "N/A" ))
+(insert-records :into [pokemon] :values '(263 "Zigzagoon" "Normal" "None" "Pickup" "Ground" "Wild Plains" 1 1 1 1 1 1 "Mt. Steel" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(264 "Linoone" "Normal" "None" "Pickup" "Ground" "Wild Plains" 1 1 1 1 1 1 "N/A" "N/A" "Zigzagoon" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(265 "Wurmple" "Bug" "None" "Shield Dust" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Joyous Tower" "1-2" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(266 "Silcoon" "Bug" "None" "Shed Skin" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Sinister Woods" "4-6" "Wurmple" "7" "N/A" ))
+(insert-records :into [pokemon] :values '(267 "Beautifly" "Bug" "Flying" "Swarm" "Float" "Mist-Rise Forest" 1 1 2 1 2 1 "N/A" "N/A" "Silcoon" "10" "N/A" ))
+(insert-records :into [pokemon] :values '(268 "Cascoon" "Bug" "None" "Shed Skin" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Sinister Woods" "4-6" "Wurmple" "7" "N/A" ))
+(insert-records :into [pokemon] :values '(269 "Dustox" "Bug" "Poison" "Shield Dust" "Float" "Mist-Rise Forest" 1 1 1 1 1 1 "N/A" "N/A" "Cascoon" "10" "N/A" ))
+(insert-records :into [pokemon] :values '(270 "Lotad" "Water" "Grass" "Swift Swim/Rain Dish" "Water" "Tadpole Pond" 1 2 2 2 2 1 "Waterfall Pond" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(271 "Lombre" "Water" "Grass" "Swift Swim/Rain Dish" "Water" "Tadpole Pond" 2 3 3 3 4 1 "Waterfall Pond" "13-16" "Lotad" "14" "N/A" ))
+(insert-records :into [pokemon] :values '(272 "Ludicolo" "Water" "Grass" "Swift Swim/Rain Dish" "Water" "Tadpole Pond" 3 4 4 4 4 1 "N/A" "N/A" "Lombre" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(273 "Seedot" "Grass" "None" "Chlorophyll/Early Bird" "Ground" "Mushroom Forest" 1 2 2 2 2 1 "Uproar Forest" "1-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(274 "Nuzleaf" "Grass" "Dark" "Chlorophyll/Early Bird" "Ground" "Mushroom Forest" 1 2 2 2 2 1 "Uproar Forest" "5-9" "Seedot" "14" "N/A" ))
+(insert-records :into [pokemon] :values '(275 "Shiftry" "Grass" "Dark" "Chlorophyll/Early Bird" "Ground" "Mushroom Forest" 3 3 3 3 3 1 "Western Cave" "15-20" "Nuzleaf" "N/A" "Leaf Stone" ))
+(insert-records :into [pokemon] :values '(276 "Taillow" "Normal" "Flying" "Guts" "Ground" "Beau Plains" 1 2 2 2 2 1 "Joyous Tower" "2-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(277 "Swellow" "Normal" "Flying" "Guts" "Ground" "Beau Plains" 2 3 3 3 2 1 "N/A" "N/A" "Taillow" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(278 "Wingull" "Water" "Flying" "Keen Eye" "Float" "Shallow Beach" 2 3 3 3 3 1 "Stormy Sea" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(279 "Pelipper" "Water" "Flying" "Keen Eye" "Float" "Shallow Beach" 3 3 3 3 4 1 "N/A" "N/A" "Wingull" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(280 "Ralts" "Psychic" "None" "Synchronize/Trace" "Ground" "Sky Blue Plains" 1 2 2 2 2 1 "Wish Cave" "11-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(281 "Kirlia" "Psychic" "None" "Synchronize/Trace" "Ground" "Sky Blue Plains" 1 3 3 3 3 1 "Solar Cave" "10-15" "Ralts" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(282 "Gardevoir" "Psychic" "None" "Synchronize/Trace" "Ground" "Sky Blue Plains" 1 3 3 3 3 1 "N/A" "N/A" "Kirlia" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(283 "Surskit" "Bug" "Water" "Swift Swim" "Water" "Tadpole Pond" 2 3 3 3 3 1 "Waterfall Pond" "4-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(284 "Masquerain" "Bug" "Flying" "Intimidate" "Float" "Tadpole Pond" 1 3 2 3 2 1 "N/A" "N/A" "Surskit" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(285 "Shroomish" "Grass" "None" "Effect Spore" "Ground" "Mushroom Forest" 1 1 1 1 1 1 "Sinister Woods" "6-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(286 "Breloom" "Grass" "Fighting" "Effect Spore" "Ground" "Mushroom Forest" 1 1 1 1 1 1 "N/A" "N/A" "Shroomish" "23" "N/A" ))
+(insert-records :into [pokemon] :values '(287 "Slakoth" "Normal" "None" "Truant" "Ground" "Energetic Forest" 1 2 2 1 1 1 "Sinister Woods" "10-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(288 "Vigoroth" "Normal" "None" "Vital Spirit" "Ground" "Energetic Forest" 1 2 2 1 1 1 "Mt. Freeze" "7-11" "Slakoth" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(289 "Slaking" "Normal" "None" "Truant" "Ground" "Energetic Forest" 2 3 1 2 1 1 "N/A" "N/A" "Vigoroth" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(290 "Nincada" "Bug" "Ground" "Compundeyes" "Ground" "Secretive Forest" 1 1 1 1 1 1 "Lapis Cave" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(291 "Ninjask" "Bug" "Flying" "Speed Boost" "Float" "Secretive Forest" 2 3 2 3 2 1 "N/A" "N/A" "Nincada" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(292 "Shedinja" "Bug" "Ghost" "Wonder Guard" "Wall" "Secretive Forest" 0 0 1 0 1 1 "N/A" "N/A" "Nincada" "20" "Crytic Forest friend area NOT full" ))
+(insert-records :into [pokemon] :values '(293 "Whismur" "Normal" "None" "Soundproof" "Ground" "Echo Cave" 2 2 3 1 3 1 "Howling Forest" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(294 "Loudred" "Normal" "None" "Soundproof" "Ground" "Echo Cave" 2 2 2 2 2 1 "Howling Forest" "9-14" "Whismur" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(295 "Exploud" "Normal" "None" "Soundproof" "Ground" "Echo Cave" 3 2 2 2 2 1 "N/A" "N/A" "Loudred" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(296 "Makuhita" "Fighting" "None" "Thick Fat/Guts" "Ground" "Mt. Discipline" 2 4 4 2 3 1 "Buried Relic" "30-34" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(297 "Hariyama" "Fighting" "None" "Thick Fat/Guts" "Ground" "Mt. Discipline" 3 3 4 2 3 1 "N/A" "N/A" "Makuhita" "24" "N/A" ))
+(insert-records :into [pokemon] :values '(298 "Azurill" "Normal" "None" "Thick Fat/Huge Power" "Water" "Turtleshell Pond" 1 1 1 1 1 1 "Frosty Forest" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(299 "Nosepass" "Rock" "None" "Sturdy/Magnet Pull" "Ground" "Echo Cave" 2 3 3 3 4 1 "Frosty Forest" "3-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(300 "Skitty" "Normal" "None" "Cute Charm" "Ground" "Energetic Forest" 3 4 4 3 4 1 "Joyous Tower" "24-28" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(301 "Delcatty" "Normal" "None" "Cute Charm" "Ground" "Enegetic Forest" 3 4 4 3 4 1 "N/A" "N/A" "Skitty" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(302 "Sableye" "Dark" "Ghost" "Keen Eye" "Ground" "Darkness Ridge" 3 3 2 2 2 1 "Darknight Relic" "1-15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(303 "Mawile" "Steel" "None" "Hyper Cutter/Intimidate" "Ground" "Echo Cave" 3 2 3 2 4 1 "Magma Cavern" "8-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(304 "Aron" "Steel" "Rock" "Sturdy/Rock Head" "Ground" "Mt. Cleft" 1 2 2 2 2 1 "Mt. Steel" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(305 "Lairon" "Steel" "Rock" "Sturdy/Rock Head" "Ground" "Mt. Cleft" 1 2 2 2 2 1 "Frosy Forest" "7-9" "Aron" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(306 "Aggron" "Steel" "Rock" "Sturdy/Rock Head" "Ground" "Mt. Cleft" 3 2 2 1 2 1 "N/A" "N/A" "Lairon" "42" "N/A" ))
+(insert-records :into [pokemon] :values '(307 "Meditite" "Fighting" "Psychic" "Pure Power" "Float" "Mt. Discipline" 2 3 2 2 2 1 "Mt. Steel" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(308 "Medicham" "Fighting" "Psychic" "Pure Power" "Ground" "Mt. Discipline" 2 3 3 3 3 1 "N/A" "N/A" "Meditite" "37" "N/A" ))
+(insert-records :into [pokemon] :values '(309 "Electrike" "Electric" "None" "Static/Lightningrod" "Ground" "Thunder Meadow" 3 2 3 2 3 1 "Mt. Thunder" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(310 "Manectric" "Electric" "None" "Static/Lightningrod" "Ground" "Thunder Meadow" 3 3 3 3 3 1 "N/A" "N/A" "Electrike" "26" "N/A" ))
+(insert-records :into [pokemon] :values '(311 "Plusle" "Electric" "None" "Plus" "Ground" "Thunder Meadow" 4 3 3 3 3 1 "Thunderwave Cave" "4-5  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(312 "Minun" "Electric" "None" "Minus" "Ground" "Thunder Meadow" 4 3 3 3 3 1 "Thunderwave Cave" "4-5  Blue Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(313 "Volbeat" "Bug" "None" "Illuminate/Swarm" "Ground" "Rub-a-Dub River" 3 2 3 1 3 1 "Northwind Field" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(314 "Illumise" "Bug" "None" "Oblivious" "Ground" "Rub-a-Dub River" 1 1 1 1 1 1 "Lapis Cave" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(315 "Roselia" "Grass" "Poison" "Natural Cure/Poison Point" "Ground" "Beau Plains" 1 1 1 1 1 1 "Uproar Forest" "4-7  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(316 "Gulpin" "Poison" "None" "Liquid Ooze/Sticky Hold" "Ground" "Poison Swamp" 2 1 2 1 2 1 "Buried Relic" "14  16-19" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(317 "Swalot" "Poison" "None" "Liquid Ooze/Sticky Hold" "Ground" "Poison Swamp" 3 2 2 1 2 1 "N/A" "N/A" "Gulpin" "26" "N/A" ))
+(insert-records :into [pokemon] :values '(318 "Carvanha" "Water" "Dark" "Rough Skin" "Water" "Treasure Sea" 3 2 2 2 2 1 "Stormy Sea" "35-39" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(319 "Sharpedo" "Water" "Dark" "Rough Skin" "Water" "Treasure Sea" 3 2 3 2 2 1 "N/A" "N/A" "Carvanha" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(320 "Wailmer" "Water" "None" "Water Veil/Oblivious" "Water" "Serene Sea" 3 3 2 2 2 1 "Silver Trench" "41-50" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(321 "Wailord" "Water" "None" "Water Veil/Oblivious" "Water" "Serene Sea" 3 3 2 2 2 4 "N/A" "N/A" "Wailmer" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(322 "Numel" "Fire" "Ground" "Oblivious" "Magma" "Crater" 2 2 3 2 3 1 "Mt. Blaze" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(323 "Camerupt" "Fire" "Ground" "Magma Armor" "Magma" "Crater" 3 2 2 2 2 1 "N/A" "N/A" "Numel" "33" "N/A" ))
+(insert-records :into [pokemon] :values '(324 "Torkoal" "Fire" "None" "White Smoke" "Magma" "Crater" 3 3 3 3 3 1 "Mt. Blaze" "7-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(325 "Spoink" "Psychic" "None" "Thick Fat/Own Tempo" "Ground" "Mt. Deepgreen" 2 3 3 2 3 1 "Howling Forest" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(326 "Grumpig" "Psychic" "None" "Thick Fat/Own Tempo" "Ground" "Mt. Deepgreen" 3 2 2 2 2 1 "N/A" "N/A" "Spoink" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(327 "Spinda" "Normal" "None" "Own Tempo" "Ground" "Mt. Deepgreen" 1 1 2 1 2 1 "Joyous Tower" "5-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(328 "Trapinch" "Ground" "None" "Hyper Cutter/Arena Trap" "Ground" "Furnace Desert" 2 1 2 1 2 1 "Silent Chasm" "6-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(329 "Vibrava" "Ground" "Dragon" "Levitate" "Float" "Furnace Desert" 2 2 2 2 2 1 "Wyvern Hill" "10-16" "Trapinch" "35" "N/A" ))
+(insert-records :into [pokemon] :values '(330 "Flygon" "Ground" "Dragon" "Levitate" "Float" "Furnace Desert" 2 1 2 1 2 1 "N/A" "N/A" "Vibrava" "45" "N/A" ))
+(insert-records :into [pokemon] :values '(331 "Cacnea" "Grass" "None" "Sand Veil" "Ground" "Furnace Desert" 1 1 1 1 1 1 "Mt. Thunder" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(332 "Cacturne" "Grass" "Dark" "Sand Veil" "Ground" "Furnace Desert" 2 1 2 1 2 1 "N/A" "N/A" "Cacnea" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(333 "Swablu" "Normal" "Flying" "Natural Cure" "Float" "Flyaway Forest" 2 3 3 3 3 1 "Mt. Freeze" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(334 "Altaria" "Dragon" "Flying" "Natural Cure" "Float" "Flyaway Forest" 3 3 2 3 2 1 "N/A" "N/A" "Swablu" "35" "N/A" ))
+(insert-records :into [pokemon] :values '(335 "Zangoose" "Normal" "None" "Immunity" "Ground" "Wild Plains" 3 3 3 3 4 1 "Mt. Freeze" "7-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(336 "Seviper" "Poison" "None" "Shed Skin" "Ground" "Wild Plains" 4 4 4 3 4 1 "Mt. Freeze" "13-15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(337 "Lunatone" "Rock" "Psychic" "Levitate" "Float" "Mt. Moonview" 2 1 1 1 1 1 "Sky Tower" "1-11" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(338 "Solrock" "Rock" "Psychic" "Levitiate" "Float" "Mt. Moonview" 2 1 1 1 1 1 "Sky Tower" "12-20" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(339 "Barboach" "Water" "Ground" "Oblivious" "Water" "Peanut Swamp" 2 2 2 2 2 1 "Waterfall Pond" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(340 "Wishcash" "Water" "Ground" "Oblivious" "Water" "Peanut Swamp" 3 2 2 2 2 1 "N/A" "N/A" "Barboach" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(341 "Corphish" "Water" "None" "Hyper Cutter/Shell Armor" "Water" "Turtleshell Pond" 2 3 3 3 3 1 "Waterfall Pond" "6-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(342 "Crawdaunt" "Water" "Dark" "Hyper Cutter/Shell Armor" "Water" "Turtleshell Pond" 3 3 3 3 3 1 "N/A" "N/A" "Corphish" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(343 "Baltoy" "Ground" "Psychic" "Levitate" "Float" "Ancient Relic" 2 2 2 2 2 1 "Mt. Steel" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(344 "Claydol" "Ground" "Psychic" "Levitate" "Float" "Ancient Relic" 2 2 2 2 2 1 "N/A" "N/A" "Baltoy" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(345 "Lileep" "Rock" "Grass" "Suction Cups" "Ground" "Deep-Sea Floor" 2 1 1 1 1 1 "Silver Trench" "80-89" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(346 "Cradily" "Rock" "Grass" "Suction Cups" "Ground" "Deep-Sea Floor" 3 1 1 1 1 1 "Silver Trench" "90-98" "Lileep" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(347 "Anorith" "Rock" "Bug" "Battle Armor" "Ground" "Treasure Sea" 3 3 2 2 2 1 "Stormy Sea" "9-17" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(348 "Armaldo" "Rock" "Bug" "Battle Armor" "Ground" "Treasure Sea" 3 3 3 3 3 1 "N/A" "N/A" "Anorith" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(349 "Feebas" "Water" "None" "Swift Swim" "Water" "Waterfall Lake" 1 1 1 1 1 1 "Waterfall Pond" "16-19  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(350 "Milotic" "Water" "None" "Marvel Scale" "Water" "Waterfall Lake" 4 2 2 2 2 4 "N/A" "N/A" "Feebas" "N/A" "Beauty Scarf" ))
+(insert-records :into [pokemon] :values '(351 "Castform" "Normal" "None" "Forecaste" "Ground" "Thunder Meadow" 2 2 3 1 3 1 "Mt. Faraway" "20-29" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(352 "Kecleon" "Normal" "None" "Color Change" "Ground" "Overgrown Forest" 3 3 4 2 4 1 "Kecleon Shop (Dungeon)" "N/A" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(353 "Shuppet" "Ghost" "None" "Insomnia" "Wall" "Darkness Ridge" 2 2 2 2 2 1 "Sky Tower" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(354 "Banette" "Ghost" "None" "Insomnia" "Wall" "Darkness Ridge" 2 3 2 3 2 1 "N/A" "N/A" "Shuppet" "37" "N/A" ))
+(insert-records :into [pokemon] :values '(355 "Duskull" "Ghost" "None" "Levitate" "Wall" "Darkness Ridge" 3 1 2 1 2 1 "Sky Tower" "7-14" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(356 "Dusclops" "Ghost" "None" "Pressure" "Ground" "Darkness Ridge" 3 2 2 2 2 1 "N/A" "N/A" "Duskull" "37" "N/A" ))
+(insert-records :into [pokemon] :values '(357 "Tropius" "Grass" "Flying" "Chlorophyll" "Ground" "Jungle" 3 2 2 2 2 1 "Sky Tower" "22-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(358 "Chimecho" "Psychic" "None" "Levitate" "Float" "Thunder Meadow" 2 1 3 1 3 1 "Mt. Freeze" "7-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(359 "Absol" "Dark" "None" "Pressure" "Ground" "Darkness Ridge" 3 2 1 2 1 1 "Northwind Field" "28-29" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(360 "Wynaut" "Psychic" "None" "Shadow Tag" "Ground" "Echo Cave" 2 2 1 2 1 1 "Buried Relic" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(361 "Snorunt" "Ice" "None" "Inner Focus" "Ground" "Frigid Cavern" 1 3 1 3 1 1 "Frosty Forest" "8-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(362 "Glalie" "Ice" "None" "Inner Focus" "Ground" "Frigid Cavern" 3 2 2 2 2 1 "N/A" "N/A" "Snorunt" "42" "N/A" ))
+(insert-records :into [pokemon] :values '(363 "Spheal" "Ice" "Water" "Thick Fat" "Water" "Ice Floe Beach" 2 3 3 3 2 1 "Stormy Sea" "15-24" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(364 "Sealeo" "Ice" "Water" "Thick Fat" "Water" "Ice Floe Beach" 3 3 3 3 3 1 "Stormy Sea" "34-39" "Spheal" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(365 "Walrein" "Ice" "Water" "Thick Fat" "Water" "Ice Floe Beach" 4 3 3 3 3 1 "N/A" "N/A" "Sealeo" "44" "N/A" ))
+(insert-records :into [pokemon] :values '(366 "Clamperl" "Water" "None" "Shell Armor" "Water" "Deep-Sea Floor" 3 2 2 1 2 1 "Silver Trench" "65-79" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(367 "Huntail" "Water" "None" "Swift Swim" "Water" "Deep-Sea Floor" 4 3 2 3 2 1 "N/A" "N/A" "Clamperl" "N/A" "Deepseatooth  Link Cable" ))
+(insert-records :into [pokemon] :values '(368 "Gorebyss" "Water" "None" "Swift Swim" "Water" "Deep-Sea Floor" 3 2 2 2 2 1 "N/A" "N/A" "Calmperl" "N/A" "Deepseascale  Link Cable" ))
+(insert-records :into [pokemon] :values '(369 "Relicanth" "Water" "Rock" "Swift Swim/Rock Head" "Water" "Deep-Sea Floor" 4 3 3 3 4 1 "Silver Trench" "80-89" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(370 "Luvdisc" "Water" "None" "Swift Swim" "Water" "Treasure Sea" 3 3 2 2 2 1 "Silver Trench" "45-54" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(371 "Bagon" "Dragon" "None" "Rock Head" "Ground" "Dragon Cave" 2 1 2 1 2 1 "Lapis Cave" "9-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(372 "Shelgon" "Dragon" "None" "Rock Head" "Ground" "Dragon Cave" 3 1 2 1 2 1 "Mt. Freeze" "1-6" "Bagon" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(373 "Salamence" "Dragon" "Flying" "Intimidate" "Ground" "Dragon Cave" 4 2 3 2 3 2 "N/A" "N/A" "Shelgon" "50" "N/A" ))
+(insert-records :into [pokemon] :values '(374 "Beldum" "Steel" "Psychic" "Clear Body" "Float" "Magnetic Quarry" 2 1 3 1 2 1 "Mt. Steel" "6-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(375 "Metang" "Steel" "Psychic" "Clear Body" "Float" "Magnetic Quarry" 2 3 4 1 4 1 "Frosy Forest" "1-4" "Beldum" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(376 "Metagross" "Steel" "Psychic" "Clear Body" "Ground" "Magnetic Quarry" 2 3 3 3 4 2 "N/A" "N/A" "Metang" "45" "N/A" ))
+(insert-records :into [pokemon] :values '(377 "Regirock" "Rock" "None" "Clear Body" "Ground" "Ancient Relic" 2 4 4 4 4 1 "Buried Relic" "15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(378 "Regice" "Ice" "None" "Clear Body" "Ground" "Ancient Relic" 2 4 4 3 4 1 "Buried Relic" "25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(379 "Registeel" "Steel" "None" "Clear Body" "Ground" "Ancient Relic" 3 3 4 3 4 1 "Buried Relic" "35" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(380 "Latias" "Dragon" "Psychic" "Levitate" "Float" "Southern Island" 3 3 3 3 4 1 "Pitfall Valley" "N/A" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(381 "Latios" "Dragon" "Psychic" "Levitate" "Float" "Southern Island" 3 3 3 3 4 2 "Northern Range" "N/A" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(382 "Kyogre" "Water" "None" "Drizzle" "Water" "Seafloor Cave" 3 3 4 3 4 4 "Stormy Sea" "40" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(383 "Groudon" "Ground" "None" "Drought" "Magma" "Volcanic Pit" 4 3 3 3 3 4 "Magma Cavern Pit" "3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(384 "Rayquaza" "Dragon" "Flying" "Air Lock" "Float" "Stratos Lookout" 4 3 3 3 4 4 "Sky Tower Summit" "9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(385 "Jirachi" "Steel" "Psychci" "Serene Grace" "Float" "Mt. Moonview" 3 2 3 2 4 1 "Wish Cave" "99" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(386 "Deoxys" "Psychic" "None" "Pressure" "Float" "Enclosed Island" 4 4 4 4 4 1 "Meteor Cave" "20" "N/A" "N/A" "N/A" ))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\clsql-corman-test.lisp clsql\clsql-corman-test.lisp
--- clsql-3.7.4\clsql-corman-test.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\clsql-corman-test.lisp	Fri Oct 13 17:19:07 2006
@@ -0,0 +1,432 @@
+(require '#:winbase)
+(require '#:asdf-patch)
+(require '#:asdf)
+(require '#:asdf-addons)
+(pushnew 'asdf-util:source-dir-search
+         asdf:*system-definition-search-functions*)
+(pushnew #p"C:/dev/uffi" asdf-util:*source-dirs* :test #'equal)
+(pushnew #p"C:/dev/clsql" asdf-util:*source-dirs* :test #'equal)
+(asdf:operate 'asdf:load-op '#:clsql)
+;; (asdf:operate 'asdf:test-op '#:clsql)
+;; (asdf:operate 'asdf:load-op '#:clsql-tests)
+(use-package '#:clsql)
+;(use-package '#:clsql-tests)
+(enable-sql-reader-syntax)
+(clsql:push-library-path "/dev/clsql/")
+(setf *default-database-type* :odbc)
+;(setf *default-database-type* :mysql)
+;(setf *default-database-type* :sqlite3)
+(initialize-database-type)
+;(connect '("pokemon")) ; for SQLite3
+;(connect '("localhost" "pokemon" "root" "raistlin")) ; for MySQL
+(connect '("Pokemon Database" "" "")) ; for ODBC
+
+(if (member "pokemon" (list-tables) :test #'equalp)
+    (drop-table "pokemon"))
+
+(create-table "pokemon" 
+              '(([id] integer :primary-key :not-null) 
+                ([Name] (string 40) :not-null) 
+                ([Type1] (string 15) :not-null) 
+                ([Type2] (string 15) :not-null)
+                ([Ability] (string 30) :not-null)
+                (["Terrain Ability"] (string 30))
+                (["Friend Area"] (string 30))
+                ([HP] integer)
+                ([ATK] integer)
+                ([DEF] integer)
+                (["SP ATK"] integer)
+                (["SP DEF"] integer)
+                ([Size] integer)
+                ([Find] string)
+                (["Find Floor"] string)
+                ([Evolution] string)
+                (["Evolution Level"] string)
+                (["Evolution Condition"] string)))
+
+(insert-records :into [pokemon] :values '(1 "Bulbasaur" "Grass" "Poison" "Overgrow" "Ground" "Beau Plains" 3 3 4 2 4 1 "Joyous Tower" "1-5" "N/A" "N/A" "N/A"))
+(insert-records :into [pokemon] :values '(2 "Ivysaur" "Grass" "Poison" "Overgrow" "Ground" "Beau Plains" 4 4 2 3 1 1 "Western Cave" "19-27" "Bulbasaur" "16" "N/A"))
+(insert-records :into [pokemon] :values '(3 "Venusaur" "Grass" "Poison" "Overgrow" "Ground" "Beau Plains" 4 4 2 4 2 1 "N/A" "N/A" "Ivysaur" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(4 "Charmander" "Fire" "None" "Blaze" "Magma" "Mt. Cleft" 3 4 4 3 4 1 "Fiery Field" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(5 "Charmeleon" "Fire" "None" "Blaze" "Magma" "Mt. Cleft" 3 4 4 3 4 1 "Fiery Field" "26-29" "Charmander" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(6 "Charizard" "Fire" "Flying" "Blaze" "Magma" "Mt. Cleft" 3 4 4 3 4 1 "N/A" "N/A" "Charmeleon" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(7 "Squirtle" "Water" "None" "Torrent" "Water" "Turtleshell Pond" 3 3 4 3 4 1 "Waterfall Pond" "8-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(8 "Wartortle" "Water" "None" "Torrent" "Water" "Turtleshell Pond" 3 3 4 3 4 1 "Northwind Field" "27-29" "Squirtle" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(9 "Blastoise" "Water" "None" "Torrent" "Water" "Turtleshell Pond" 3 3 4 3 4 1 "Western Cave" "89-98" "Wartortle" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(10 "Caterpie" "Bug" "None" "Shield Dust" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Wish Cave" "2-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(11 "Metapod" "Bug" "None" "Shed Skin" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Joyous Tower" "7-8" "Caterpie" "7" "N/A" ))
+(insert-records :into [pokemon] :values '(12 "Butterfree" "Bug" "Flying" "Compoundeyes" "Float" "Mist-Rise Forest" 1 1 1 1 1 1 "N/A" "N/A" "Metapod" "10" "N/A" ))
+(insert-records :into [pokemon] :values '(13 "Weedle" "Bug" "Poison" "Shield Dust" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Silent Chasm" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(14 "Kakuna" "Bug" "Poison" "Shed Skin" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Joyous Tower" "9-13" "Weedle" "7" "N/A" ))
+(insert-records :into [pokemon] :values '(15 "Beedrill" "Bug" "Poison" "Swarm" "Float" "Mist-Rise Forest" 2 1 1 1 1 1 "N/A" "N/A" "Kakuna" "10" "N/A" ))
+(insert-records :into [pokemon] :values '(16 "Pidgey" "Normal" "Flying" "Keen Eye" "Ground" "Flyaway Forest" 1 3 3 3 2 1 "Howling Forest" "9-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(17 "Pidgeotto" "Normal" "Flying" "Keen Eye" "Ground" "Flyaway Forest" 1 3 2 2 1 1 "Mt. Thunder" "2-5" "Pidgey" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(18 "Pidgeot" "Normal" "Flying" "Keen Eye" "Ground" "Flyaway Forest" 2 3 3 3 2 1 "N/A" "N/A" "Pidgeotto" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(19 "Rattata" "Normal" "None" "Run Away/Guts" "Ground" "Wild Plains" 1 2 3 1 2 1 "Thunderwave Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(20 "Raticate" "Normal" "None" "Run Away/Guts" "Ground" "Wild Plains" 3 3 4 3 3 1 "N/A" "N/A" "Rattata" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(21 "Spearow" "Normal" "Flying" "Keen Eye" "Ground" "Ravaged Field" 2 2 3 2 3 1 "Mt. Steel" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(22 "Fearow" "Normal" "Flying" "Keen Eye" "Ground" "Ravaged Field" 1 1 2 1 2 1 "N/A" "N/A" "Spearow" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(23 "Ekans" "Poison" "None" "Intimidate/Shed Skin" "Ground" "Wild Plains" 2 2 2 2 2 1 "Western Cave" "3-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(24 "Arbok" "Poison" "None" "Intimidate/Shed Skin" "Ground" "Wild Plains" 2 3 2 2 3 1 "N/A" "N/A" "Ekans" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(25 "Pikachu" "Electric" "None" "Static" "Ground" "Energetic Forest" 3 4 4 4 4 1 "Lightning Field" "6-10" "Pichu" "N/A" "IQ 6 Stars" ))
+(insert-records :into [pokemon] :values '(26 "Raichu" "Electric" "None" "Static" "Ground" "Energetic Forest" 4 4 4 4 4 1 "N/A" "N/A" "Pikachu" "N/A" "Thunderstone" ))
+(insert-records :into [pokemon] :values '(27 "Sandshrew" "Ground" "None" "Sand Veil" "Ground" "Furnace Desert" 2 3 4 2 3 1 "Magma Cavern" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(28 "Sandslash" "Ground" "None" "Sand Veil" "Ground" "Furnace Desert" 2 3 4 2 3 1 "N/A" "N/A" "Sandshrew" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(29 "Nidoran Female" "Poison" "None" "Poison Point" "Ground" "Safari" 1 1 1 1 2 1 "Thunderwave Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(30 "Nidorina" "Poison" "None" "Poison Point" "Ground" "Safari" 1 1 1 1 2 1 "Lapis Cave" "4-8" "Nidoran Female" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(31 "Nidoqueen" "Poison" "Ground" "Poison Point" "Ground" "Safari" 1 2 2 2 2 1 "N/A" "N/A" "Nidorina" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(32 "Nidoran Male" "Poison" "None" "Poison Point" "Ground" "Safari" 1 1 1 1 1 1 "Mt. Thunder" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(33 "Nidorino" "Poison" "None" "Poison Point" "Ground" "Safari" 1 1 1 1 1 1 "Lapis Cave" "4-8" "Nidoran Male" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(34 "Nidoking" "Poison" "Ground" "Poison Point" "Ground" "Safari" 1 2 2 2 2 1 "N/A" "N/A" "Nidorino" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(35 "Clefairy" "Normal" "None" "Cute Charm" "Ground" "Mt. Moonview" 1 1 2 1 2 1 "Joyous Tower" "9-14" "Cleffa" "N/A" "IQ 6 Stars" ))
+(insert-records :into [pokemon] :values '(36 "Clefable" "Normal" "None" "Cute Charm" "Ground" "Mt. Moonview" 1 2 2 2 2 1 "N/A" "N/A" "Clefairy" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(37 "Vulpix" "Fire" "None" "Flash Fire" "Magma" "Darkness Ridge" 3 3 2 3 2 1 "Fiery Field" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(38 "Ninetails" "Fire" "None" "Flash Fire" "Magma" "Darkness Ridge" 4 2 2 2 2 1 "N/A" "N/A" "Vulpix" "N/A" "Fire Stone" ))
+(insert-records :into [pokemon] :values '(39 "Jigglypuff" "Normal" "None" "Cute Charm" "Ground" "Sky Blue Plains" 3 3 1 2 1 1 "Wish Cave" "1-4" "Igglybuff" "N/A" "IQ 6 Stars" ))
+(insert-records :into [pokemon] :values '(40 "Wigglytuff" "Normal" "None" "Cute Charm" "Ground" "Sky Blue Plains" 3 2 1 3 1 1 "N/A" "N/A" "Jigglypuff" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(41 "Zubat" "Poison" "Flying" "Inner Focus" "Float" "Echo Cave" 1 1 1 1 1 1 "Lapis Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(42 "Golbat" "Poison" "Flying" "Inner Focus" "Float" "Echo Cave" 1 1 1 1 1 1 "Lapis Cave" "11-14" "Zubat" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(43 "Oddish" "Grass" "Poison" "Chlorophyll" "Ground" "Jungle" 2 1 2 1 2 1 "Sinister Woods" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(44 "Gloom" "Grass" "Poison" "Chlorophyll" "Ground" "Jungle" 2 1 1 1 1 1 "Silent Chasm" "1-9" "Oddish" "21" "N/A" ))
+(insert-records :into [pokemon] :values '(45 "Vileplume" "Grass" "Poison" "Chlorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "N/A" "N/A" "Gloom" "N/A" "Leaf Stone" ))
+(insert-records :into [pokemon] :values '(46 "Paras" "Bug" "Grass" "Effect Spore" "Ground" "Mushroom Forest" 2 3 3 3 3 1 "Silent Chasm" "7-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(47 "Parasect" "Bug" "Grass" "Effect Spore" "Ground" "Mushroom Forest" 1 1 2 1 2 1 "N/A" "N/A" "Paras" "24" "N/A" ))
+(insert-records :into [pokemon] :values '(48 "Venonat" "Bug" "Poison" "Compoundeyes" "Ground" "Secretive Forest" 2 1 2 2 2 1 "Uproar Forest" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(49 "Venomoth" "Bug" "Poison" "Shield Dust" "Float" "Secretive Forest" 2 3 2 3 2 1 "N/A" "N/A" "Venonat" "31" "N/A" ))
+(insert-records :into [pokemon] :values '(50 "Diglett" "Ground" "None" "Sand Veil/Arena Trap" "Ground" "Boulder Cave" 2 1 2 1 2 1 "Southern Cave" "-1-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(51 "Dugtrio" "Ground" "None" "Sand Veil/Arena Trap" "Ground" "Boulder Cave" 3 2 2 1 2 1 "N/A" "N/A" "Diglett" "26" "N/A" ))
+(insert-records :into [pokemon] :values '(52 "Meowth" "Normal" "None" "Pickup" "Ground" "Energetic Forest" 3 3 3 3 4 1 "Western Cave" "3-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(53 "Persian" "Normal" "None" "Limber" "Ground" "Energetic Forest" 4 3 3 3 4 1 "N/A" "N/A" "Meowth" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(54 "Psyduck" "Water" "None" "Damp/Cloud Nine" "Water" "Turtleshell Pond" 3 4 4 4 4 1 "Joyous Tower" "9-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(55 "Golduck" "Water" "None" "Damp/Cloud Nine" "Water" "Turtleshell Pond" 4 4 4 4 4 1 "N/A" "N/A" "Psyduck" "33" "N/A" ))
+(insert-records :into [pokemon] :values '(56 "Mankey" "Fighting" "None" "Vital Spirit" "Ground" "Energetic Forest" 1 1 1 1 1 1 "Uproar Forest" "8-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(57 "Primeape" "Fighting" "None" "Vital Spirit" "Ground" "Energetic Forest" 2 1 1 1 1 1 "N/A" "N/A" "Mankey" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(58 "Growlithe" "Fire" "None" "Intimidate/Flash Fire" "Magma" "Scorched Plains" 3 1 2 1 2 1 "Mt. Thunder" "9-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(59 "Arcanine" "Fire" "None" "Intimidate/Flash Fire" "Magma" "Scorched Plains" 3 1 2 1 2 1 "N/A" "N/A" "Growlithe" "N/A" "Fire Stone" ))
+(insert-records :into [pokemon] :values '(60 "Poliwag" "Water" "None" "Water Absorb/Damp" "Water" "Tadpole Pond" 2 1 1 1 1 1 "Silent Chasm" "5-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(61 "Poliwhirl" "Water" "Nonw" "Water Absorb/Damp" "Water" "Tadpole Pond" 2 1 1 1 1 1 "Northwind Field" "10-16" "Poliwag" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(62 "Poliwrath" "Water" "Fighting" "Water Absorb/Damp" "Water" "Tadpole Pond" 2 1 1 1 1 1 "N/A" "N/A" "Poliwhirl" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(63 "Abra" "Psychic" "None" "Synchronize/Inner Focus" "Float" "Decrepit Lab" 1 1 3 1 3 1 "Buried Relic" "10  20  30" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(64 "Kadabra" "Psychic" "None" "Synchronize/Inner Focus" "Ground" "Decrepit Lab" 1 1 1 1 1 1 "Buried Relic" "40-49" "Abra" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(65 "Alakazam" "Psychic" "None" "Synchronize/Inner Focus" "Ground" "Decrepit Lab" 1 1 1 1 1 1 "N/A" "N/A" "Kadabra" "N/A" "Link Cable" ))
+(insert-records :into [pokemon] :values '(66 "Machop" "Fighting" "None" "Guts" "Ground" "Mt. Discipline" 3 3 3 3 4 1 "Buried Relic" "4-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(67 "Machoke" "Fighting" "None" "Guts" "Ground" "Mt. Discipline" 3 3 3 3 4 1 "Buried Relic" "80-87" "Machop" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(68 "Machamp" "Fighting" "None" "Guts" "Ground" "Mt. Discipline" 4 3 3 3 4 1 "N/A" "N/A" "Machoke" "N/A" "Link Cable" ))
+(insert-records :into [pokemon] :values '(69 "Bellsprout" "Grass" "Poison" "Clorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "Wish Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(70 "Weepinbell" "Grass" "Poison" "Clorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "N/A" "N/A" "Bellsprout" "21" "N/A" ))
+(insert-records :into [pokemon] :values '(71 "Victreebel" "Grass" "Poison" "Clorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "N/A" "N/A" "Weepinbell" "N/A" "Leaf Stone" ))
+(insert-records :into [pokemon] :values '(72 "Tentacool" "Water" "Poison" "Clear Body/Liquid Ooze" "Water" "Bountiful Sea" 2 2 2 2 2 1 "Stormy Sea" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(73 "Tentacruel" "Water" "Poison" "Clear Body/Liquid Ooze" "Water" "Bountiful Sea" 2 2 1 1 1 1 "Stormy Sea" "31-39" "Tentacool" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(74 "Geodude" "Rock" "Ground" "Rock Head/Sturdy" "Ground" "Mt. Deepgreen" 3 3 3 3 3 1 "Mt. Steel" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(75 "Graveler" "Rock" "Ground" "Rock Head/Sturdy" "Ground" "Mt. Deepgreen" 2 3 2 3 2 1 "Magma Cavern" "5-10" "Geodude" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(76 "Golem" "Rock" "Ground" "Rock Head/Sturdy" "Ground" "Mt. Deepgreen" 2 3 2 3 2 1 "Magma Cavern" "15-20" "Graveler" "N/A" "Link Cable" ))
+(insert-records :into [pokemon] :values '(77 "Ponyta" "Fire" "None" "Run Away/Flash Fire" "Magma" "Scorched Plains" 1 1 1 1 1 1 "Joyous Tower" "57-59" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(78 "Rapidash" "Fire" "None" "Run Away/Flash Fire" "Magma" "Scorched Plains" 2 3 2 3 2 1 "N/A" "N/A" "Ponyta" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(79 "Slowpoke" "Water" "Psychic" "Oblivious/Own Tempo" "Water" "Bountiful Sea" 2 4 4 3 3 1 "Stormy Sea" "11-19" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(80 "Slowbro" "Water" "Psychic" "Oblivious/Own Tempo" "Water" "Bountiful Sea" 3 4 4 3 3 1 "N/A" "N/A" "Slowpoke" "37" "N/A" ))
+(insert-records :into [pokemon] :values '(81 "Magnemite" "Electric" "Steel" "Magnet Pull/Sturdy" "Float" "Power Plant" 4 3 3 2 3 1 "Lightning Field" "1-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(82 "Magneton" "Electric" "Steel" "Magnet Pull/Sturdy" "Float" "Power Plant" 3 2 2 2 2 1 "N/A" "N/A" "Magnemite" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(83 "Farfetch'd" "Normal" "Flying" "Keen Eye/Inner Focus" "Ground" "Wild Plains" 2 2 2 1 3 1 "Silent Chasm" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(84 "Doduo" "Normal" "Flying" "Run Away/Early Bird" "Ground" "Safari" 3 2 2 1 3 1 "Great Canyon" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(85 "Dodrio" "Normal" "Flying" "Run Away/Early Bird" "Ground" "Safari" 2 3 1 2 2 1 "N/A" "N/A" "Doduo" "31" "N/A" ))
+(insert-records :into [pokemon] :values '(86 "Seel" "Water" "None" "Thick Fat" "Water" "Ice Floe Beach" 2 3 4 2 3 1 "Mt. Freeze" "3-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(87 "Dewgong" "Water" "Ice" "Thick Fat" "Water" "Ice Floe Beach" 3 4 3 3 2 1 "N/A" "N/A" "Seel" "34" "N/A" ))
+(insert-records :into [pokemon] :values '(88 "Grimer" "Poison" "None" "Stench/Sticky Hold" "Ground" "Poison Swamp" 2 1 2 1 2 1 "Magma Cavern" "15-21" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(89 "Muk" "Poison" "None" "Stench/Sticky Hold" "Ground" "Poison Swamp" 2 3 2 2 2 1 "N/A" "N/A" "Grimer" "38" "N/A" ))
+(insert-records :into [pokemon] :values '(90 "Shellder" "Water" "None" "Shell Armor" "Water" "Bountiful Sea" 3 3 2 2 2 1 "Stormy Sea" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(91 "Cloyster" "Water" "Ice" "Shell Armor" "Water" "Bountiful Sea" 3 4 3 3 2 1 "N/A" "N/A" "Shellder" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(92 "Gastly" "Ghost" "Poison" "Levitate" "Wall" "Darkness Ridge" 3 2 2 2 2 1 "Buried Relic" "9-14" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(93 "Haunter" "Ghost" "Poison" "Levitate" "Wall" "Darkness Ridge" 3 3 3 3 3 1 "Buried Relic" "82-93" "Gastly" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(94 "Gengar" "Ghost" "Poison" "Levitate" "Wall" "Darkness Ridge" 3 2 3 2 3 1 "N/A" "N/A" "Haunter" "N/A" "Link Cable" ))
+(insert-records :into [pokemon] :values '(95 "Onix" "Rock" "Ground" "Rock Head/Sturdy" "Ground" "Boulder Cave" 2 3 1 2 1 4 "Magma Cavern" "21-23" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(96 "Drowzee" "Psychic" "None" "Insomnia" "Ground" "Wild Plains" 1 1 1 1 1 1 "Buried Relic" "9-14" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(97 "Hypno" "Psychic" "None" "Insomnia" "Ground" "Wild Plains" 1 3 1 2 1 1 "N/A" "N/A" "Drowzee" "26" "N/A" ))
+(insert-records :into [pokemon] :values '(98 "Krabby" "Water" "None" "Hyper Cutter/Shell Armor" "Water" "Shallow Beach" 3 4 3 3 3 1 "Silver Trench" "15-24" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(99 "Kingler" "Water" "None" "Hyper Cutter/Shell Armor" "Water" "Shallow Beach" 4 4 3 3 4 1 "N/A" "N/A" "Krabby" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(100 "Voltorb" "Electric" "None" "Soundproof/Static" "Ground" "Power Plant" 2 2 3 3 3 1 "Thunderwave Cave" "3-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(101 "Electrode" "Electric`" "None" "Soundproof/Static" "Ground" "Power Plant" 3 3 3 3 2 1 "N/A" "N/A" "Voltorb" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(102 "Exeggcute" "Grass" "Psychic" "Chlorophyll" "Ground" "Jungle" 2 2 3 2 3 1 "Howling Forest" "14" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(103 "Exeggutor" "Grass" "Psychic" "Chlorophyll" "Ground" "Jungle" 2 3 1 2 1 1 "N/A" "N/A" "Exeggcute" "N/A" "Leaf Stone" ))
+(insert-records :into [pokemon] :values '(104 "Cubone" "Ground" "None" "Rock Head/Lightningrod" "Ground" "Mt. Deepgreen" 3 3 3 3 4 1 "Southern Cavern" "5-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(105 "Marowak" "Ground" "None" "Rock Head/Lightningrod" "Ground" "Mt. Deepgreen" 3 3 3 3 4 1 "N/A" "N/A" "Cubone" "28" "N/A" ))
+(insert-records :into [pokemon] :values '(106 "Hitmonlee" "Fighting" "None" "Limber" "Ground" "Mt. Discipline" 1 1 1 1 1 1 "N/A" "N/A" "Tyrogue" "20" "ATK higher than DEF" ))
+(insert-records :into [pokemon] :values '(107 "Hitmonchan" "Fighting" "None" "Keen Eye" "Ground" "Mt. Discipline" 1 1 1 1 1 1 "N/A" "N/A" "Tyrogue" "20" "DEF higher that ATK" ))
+(insert-records :into [pokemon] :values '(108 "Lickitung" "Normal" "None" "Own Tempo" "Ground" "Sky Blue Plains" 3 1 1 1 1 1 "Western Cave" "37-44" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(109 "Koffing" "Poison" "None" "Levitate" "Float" "Poison Swamp" 1 1 1 1 1 1 "Sky Tower" "9-16" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(110 "Weezing" "Poison" "None" "Levitate" "Float" "Poison Swamp" 1 2 1 2 1 1 "N/A" "N/A" "Koffing" "35" "N/A" ))
+(insert-records :into [pokemon] :values '(111 "Rhyhorn" "Ground" "Rock" "Lightningrod/Rock Head" "Ground" "Safari" 2 1 3 1 2 1 "Frosty Grotto" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(112 "Rhydon" "Ground" "Rock" "Lightningrog/Rock Head" "Ground" "Safari" 3 3 3 3 2 1 "N/A" "N/A" "Rhyhorn" "42" "N/A" ))
+(insert-records :into [pokemon] :values '(113 "Chansey" "Normal" "None" "Natural Cure/Serene Grace" "Ground" "Sky Blue Plains" 1 1 1 1 1 1 "Joyous Tower" "50  60  77" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(114 "Tangela" "Grass" "None" "Chlorophyll" "Ground" "Jungle" 3 3 2 3 3 1 "Lapis Cave" "9-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(115 "Kangaskhan" "Normal" "None" "Early Bird" "Ground" "Safari" 3 2 3 3 3 1 "Western Cave" "13-19" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(116 "Horsea" "Water" "None" "Swift Swim" "Water" "Treasure Sea" 3 2 2 2 2 1 "Silver Trench" "10-20" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(117 "Seadra" "Water" "None" "Poison Point" "Water" "Treasure Sea" 3 3 2 3 3 1 "Stormy Sea" "30-39" "Horsea" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(118 "Goldeen" "Water" "None" "Swift Swim/Water Veil" "Water" "Rub-a-Dub River" 1 3 4 2 3 1 "Waterfall Pond" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(119 "Seaking" "Water" "None" "Swift Swim/Water Veil" "Water" "Rub-a-Dub River" 1 4 4 3 3 1 "N/A" "N/A" "Goldeen" "33" "N/A" ))
+(insert-records :into [pokemon] :values '(120 "Staryu" "Water" "None" "Illuminate/Natural Cure" "Water" "Bountiful Sea" 3 3 2 2 2 1 "Silver Trench" "15-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(121 "Starmie" "Water" "None" "Illumnate/Natural Cure" "Water" "Bountiful Sea" 3 3 2 3 3 1 "N/A" "N/A" "Staryu" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(122 "Mr. Mime" "Psychic" "None" "Soundproof" "Ground" "Decrepit Lab" 4 3 4 3 4 1 "Solar Cave" "7-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(123 "Scyther" "Bug" "Flying" "Swarm" "Ground" "Overgrown Forest" 2 2 3 2 3 1 "Sinister Woods" "8-11" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(124 "Jynx" "Ice" "Psychic" "Oblivious" "Ground" "Frigid Cavern" 2 2 1 1 1 1 "N/A" "N/A" "Smoochum" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(125 "Electabuzz" "Electric" "None" "Static" "Ground" "Power Plant" 1 3 2 2 1 1 "N/A" "N/A" "Elekid" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(126 "Magmar" "Fire" "None" "Flame Body" "Magma" "Crater" 3 3 3 4 3 1 "N/A" "N/A" "Magby" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(127 "Pinsir" "Bug" "None" "Hyper Cutter" "Ground" "Overgrown Forest" 4 3 4 3 4 1 "Mt. Steel" "7-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(128 "Tauros" "Normal" "None" "Intimidate" "Ground" "Safari" 4 3 3 3 4 1 "Great Canyon" "10-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(129 "Magikarp" "Water" "None" "Swift Swim" "Water" "Waterfall Lake" 1 1 1 1 1 1 "Waterfall Pond" "7-11  Blue Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(130 "Gyarados" "Water" "Flying" "Intimidate" "Float" "Waterfall Lake" 4 2 3 2 3 4 "N/A" "N/A" "Magikarp" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(131 "Lapras" "Water" "Ice" "Water Absorb/Shell Armor" "Water" "Mystic Lake" 3 3 4 3 4 4 "Farr-off Sea" "45-50  Blue Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(132 "Ditto" "Normal" "None" "Limber" "Ground" "Decrepit Lab" 2 1 2 1 2 1 "Frosty Forest" "4-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(133 "Eevee" "Normal" "None" "Run Away" "Ground" "Transform Forest" 3 4 4 4 4 1 "Joyous Tower" "12-17" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(134 "Vaporeon" "Water" "None" "Water Absorb" "Water" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(135 "Jolteon" "Electric" "None" "Volt Absorb" "Ground" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Thunderstone" ))
+(insert-records :into [pokemon] :values '(136 "Flareon" "Fire" "None" "Flash Fire" "Magma" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Fire Stone" ))
+(insert-records :into [pokemon] :values '(137 "Porygon" "Normal" "None" "Trace" "Water" "Decrepit Lab" 1 1 2 4 1 1 "Buried Relic" "5-10  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(138 "Omanyte" "Rock" "Water" "Swift Swim/Shell Armor" "Water" "Deep-Sea Floor" 2 2 2 2 2 1 "Stormy Sea" "1-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(139 "Omastar" "Rock" "Water" "Swift Swim/Shell Armor" "Water" "Deep-Sea Floor" 3 3 2 2 2 1 "N/A" "N/A" "Omanyte" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(140 "Kabuto" "Rock" "Water" "Swift Swim/Battle Armor" "Water" "Deep-Sea Floor" 3 4 4 3 3 1 "Silver Trench" "5-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(141 "Kabutops" "Rock" "Water" "Swift Swim/Battle Armor" "Water" "Deep-Sea Floor" 3 4 4 3 3 1 "N/A" "N/A" "Kabuto" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(142 "Aerodactyl" "Rock" "Flying" "Rock Head/Pressure" "Float" "Ancient Relic" 4 3 4 3 4 1 "Sky Tower" "21-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(143 "Snorlax" "Normal" "None" "Immunity/Thick Fat" "Ground" "Energetic Forest" 3 4 4 4 4 1 "Howling Forest" "11-14" "Munchlax" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(144 "Articuno" "Ice" "Flying" "Pressure" "Float" "Legendary Island" 3 2 2 2 2 4 "Frosty Grotto" "5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(145 "Zapdos" "Electric" "Flying" "Pressure" "Float" "Legendary Island" 3 2 2 2 2 4 "Mt. Thunder Peak" "3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(146 "Moltres" "Fire" "Flying" "Pressure" "Float" "Legendary Island" 3 2 2 2 2 4 "Mt. Blaze Peak" "3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(147 "Dratini" "Dragon" "None" "Shed Skin" "Water" "Mystic Lake" 3 2 2 1 2 1 "Silver Trench" "50-59" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(148 "Dragonair" "Dragon" "None" "Shed Skin" "Water" "Mystic Lake" 3 3 3 2 2 1 "Wyvern Hill" "12-20" "Dratini" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(149 "Dragonite" "Dragon" "Flying" "Inner Focus" "Water" "Mystic Lake" 4 4 3 3 3 4 "N/A" "N/A" "Dragonair" "55" "N/A" ))
+(insert-records :into [pokemon] :values '(150 "Mewtwo" "Psychic" "None" "Pressure" "Ground" "Cryptic Cave" 4 3 2 3 4 1 "Western Cave" "99" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(151 "Mew" "Psychic" "None" "Synchronize" "Float" "Final Island" 4 2 3 2 3 1 "Buried Relic" "36-98" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(152 "Chikorita" "Grass" "None" "Overgrow" "Ground" "Beau Plains" 3 4 4 4 4 1 "Joyous Tower" "8-11" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(153 "Bayleef" "Grass" "None" "Overgrow" "Ground" "Beau Plains" 4 4 4 4 4 1 "Western Cave" "20-27" "Chikorita" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(154 "Meganium" "Grass" "None" "Overgrow" "Ground" "Beau Plains" 4 4 4 4 4 1 "N/A" "N/A" "Bayleef" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(155 "Cyndaquil" "Fire" "None" "Blaze" "Magma" "Scorched Plains" 3 3 4 3 4 1 "Joyous Tower" "13-17" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(156 "Quilava" "Fire" "None" "Blaze" "Magma" "Scorched Plains" 4 3 4 3 4 1 "Fiery Field" "15-24" "Cyndaquil" "14" "N/A" ))
+(insert-records :into [pokemon] :values '(157 "Typhlosion" "Fire" "None" "Blaze" "Magma" "Scorched Plains" 4 3 4 3 4 1 "N/A" "N/A" "Quilava" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(158 "Totodile" "Water" "None" "Torrent" "Water" "Rub-a-Dub River" 3 3 3 3 4 1 "Waterfall Pond" "6-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(159 "Croconaw" "Water" "None" "Torrent" "Water" "Rub-a-Dub River" 4 3 3 3 4 1 "Northwind Field" "27-29" "Totodile" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(160 "Feraligatr" "Water" "None" "Torrent" "Water" "Rub-a-Dub River" 4 3 3 3 4 1 "Western Cave" "49-58" "Croconaw" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(161 "Sentret" "Normal" "None" "Run Away/Keen Eye" "Ground" "Thunder Meadow" 1 2 3 1 2 1 "Sinister Woods" "3-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(162 "Furret" "Normal" "None" "Run Away/Keen Eye" "Ground" "Thunder Meadow" 1 3 3 2 2 1 "N/A" "N/A" "Sentret" "15" "N/A" ))
+(insert-records :into [pokemon] :values '(163 "Hoothoot" "Normal" "Flying" "Insomnia/Keen Eye" "Ground" "Flyaway Forest" 2 2 3 2 3 1 "Sinister Woods" "10-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(164 "Noctowl" "Normal" "Flying" "Insomnia/Keen Eye" "Ground" "Flyaway Forest" 2 3 3 3 4 1 "N/A" "N/A" "Hoothoot" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(165 "Ladyba" "Bug" "Flying" "Swarm/Early Bird" "Float" "Mist-Rise Forest" 2 3 3 3 3 1 "Sinister Woods" "7-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(166 "Ledian" "Bug" "Flying" "Swarm/Early Bird" "Float" "Mist-Rise Forest" 1 3 2 3 2 1 "N/A" "N/A" "Ladyba" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(167 "Spinarak" "Bug" "Poison" "Swarm/Insomnia" "Ground" "Secretive Forest" 2 2 2 1 3 1 "Silent Chasm" "6-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(168 "Ariados" "Bug" "Poison" "Swarm/Insomnia" "Ground" "Secretive Forest" 2 3 3 3 3 1 "N/A" "N/A" "Spinarak" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(169 "Crobat" "Poison" "Flying" "Inner Focus" "Float" "Echo Cave" 3 3 3 2 3 1 "N/A" "N/A" "Golbat" "N/A" "IQ 5 Stars" ))
+(insert-records :into [pokemon] :values '(170 "Chinchou" "Water" "Electric" "Volt Absorb/Illuminate" "Water" "Deep-Sea Floor" 3 3 2 2 3 1 "Silver Trench" "70-79" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(171 "Lanturn" "Water" "Electric" "Volt Absorb/Illuminate" "Water" "Deep-Sea Floor" 3 3 2 3 3 1 "N/A" "N/A" "Chinchou" "27" "N/A" ))
+(insert-records :into [pokemon] :values '(172 "Pichu" "Electric" "None" "Static" "Ground" "Energetic Forest" 1 4 4 4 4 1 "Joyous Tower" "3-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(173 "Cleffa" "Normal" "None" "Cute Charm" "Ground" "Mt. Moonview" 1 1 1 1 1 1 "Wish Cave" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(174 "Igglybuff" "Normal" "None" "Cute Charm" "Ground" "Sky Blue Plains" 2 2 2 2 3 1 "Western Cave" "10-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(175 "Togepi" "Normal" "None" "Hustle/Serene Grace" "Ground" "Flyaway Forest" 1 1 1 1 1 1 "Wish Cave" "5-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(176 "Togetic" "Normal" "Flying" "Hustle/Serene Grace" "Ground" "Flyaway Forest" 2 3 3 3 3 1 "N/A" "N/A" "Togepi" "N/A" "IQ 5 Stars" ))
+(insert-records :into [pokemon] :values '(177 "Natu" "Psychic" "Flying" "Synchronize/Early Bird" "Ground" "Flyaway Forest" 2 3 2 3 2 1 "Solar Cave" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(178 "Xatu" "Psychic" "Flying" "Syncronize/Early Bird" "Ground" "Flyaway Forest" 4 3 4 3 4 1 "N/A" "N/A" "Natu" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(179 "Mareep" "Electric" "None" "Static" "Ground" "Thunder Meadow" 3 3 3 3 3 1 "Lightning Field" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(180 "Flaaffy" "Electric" "None" "Static" "Ground" "Thunder Meadow" 3 3 3 3 2 1 "Lightning Field" "7-13" "Mareep" "15" "N/A" ))
+(insert-records :into [pokemon] :values '(181 "Ampharos" "Electric" "None" "Static" "Ground" "Thunder Meadow" 3 3 3 4 3 1 "N/A" "N/A" "Flaffy" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(182 "Bellossom" "Grass" "None" "Chlorophyll" "Ground" "Jungle" 3 3 3 3 3 1 "N/A" "N/A" "Gloom" "N/A" "Sun Stone" ))
+(insert-records :into [pokemon] :values '(183 "Marill" "Water" "None" "Thick Fat/Huge Power" "Water" "Turtleshell Pond" 1 1 1 1 1 1 "Wish Cave" "4-6" "Azurill" "N/A" "IQ 6 Stars" ))
+(insert-records :into [pokemon] :values '(184 "Azumarill" "Water" "None" "Thick Fat/Huge Power" "Water" "Turtleshell Pond" 3 3 3 3 3 1 "N/A" "N/A" "Marill" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(185 "Sudowoodo" "Rock" "None" "Sturdy/Rock Head" "Ground" "Overgrown Forest" 3 2 3 2 4 1 "Sinister Woods" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(186 "Politoed" "Water" "None" "Water Absorb/Damp" "Water" "Tadpole Pond" 3 3 2 4 2 1 "N/A" "N/A" "Poliwhirl" "N/A" "King's Rock  Link Cable" ))
+(insert-records :into [pokemon] :values '(187 "Hoppip" "Grass" "Flying" "Chlorophyll" "Ground" "Beau Plains" 2 3 3 2 3 1 "Pitfall Valley" "4-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(188 "Skiploom" "Grass" "Flying" "Chlorophyll" "Ground" "Beau Plains" 2 3 3 2 3 1 "Great Canyon" "1-3" "Hoppip" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(189 "Jumpluff" "Grass" "Flying" "Chlorophyll" "Ground" "Beau Plains" 2 3 2 3 2 1 "N/A" "N/A" "Skiploom" "27" "N/A" ))
+(insert-records :into [pokemon] :values '(190 "Aipom" "Normal" "None" "Run Away/Pickup" "Ground" "Energetic Forest" 1 2 2 2 1 1 "Uproar Forest" "1-6  Blue Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(191 "Sunkern" "Grass" "None" "Chlorophyll" "Ground" "Jungle" 1 1 1 1 1 1 "Wish Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(192 "Sunflora" "Grass" "None" "Chlorophyll" "Ground" "Jungle" 1 2 1 2 1 1 "N/A" "N/A" "Sunkern" "N/A" "Sun Stone" ))
+(insert-records :into [pokemon] :values '(193 "Yanma" "Bug" "Flying" "Speed Boost/Compundeyes" "Float" "Mist-Rise Forest" 4 3 4 3 4 1 "Silent Chasm" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(194 "Wooper" "Water" "Ground" "Damp/Water Absorb" "Water" "Peanut Swamp" 1 2 2 1 2 1 "Sinister Woods" "8-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(195 "Quagsire" "Water" "Ground" "Damp/Water Absorb" "Water" "Peanut Swamp" 2 3 2 3 2 1 "N/A" "N/A" "Wooper" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(196 "Espeon" "Psychic" "None" "Synchronize" "Ground" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Sun Ribbon  IQ 4 Stars" ))
+(insert-records :into [pokemon] :values '(197 "Umbreon" "Dark" "None" "Synchronize" "Ground" "Transform Forest" 3 4 4 4 4 1 "N/A" "N/A" "Eevee" "N/A" "Lunar Ribbon  IQ 4 Stars" ))
+(insert-records :into [pokemon] :values '(198 "Murkrow" "Dark" "Flying" "Insomnia" "Ground" "Flyaway Forest" 2 1 2 1 2 1 "Great Canyon" "5-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(199 "Slowking" "Water" "Psychic" "Oblivious/Own Tempo" "Water" "Bountiful Sea" 4 4 3 4 4 1 "N/A" "N/A" "Slowpoke" "N/A" "King's Rock  Link Cable" ))
+(insert-records :into [pokemon] :values '(200 "Misdreavus" "Ghost" "None" "Levitate" "Wall" "Darkness Ridge" 3 3 3 3 3 1 "Murky Cave" "13-19" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(201 "Unown" "Psychic" "None" "Levitate" "Float" "Aged Chamber AN/O?" 4 4 3 4 3 1 "Unown Relic" "N/A" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(202 "Wobbuffet" "Psychic" "None" "Shadow Tag" "Ground" "Echo Cave" 2 4 2 3 2 1 "N/A" "N/A" "Wynaut" "15" "N/A" ))
+(insert-records :into [pokemon] :values '(203 "Girafarig" "Normal" "Psychic" "Focus/Early Bird" "Ground" "Sky Blue Plains" 3 3 3 3 4 1 "Solar Cave" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(204 "Pineco" "Bug" "None" "Sturdy" "Ground" "Secretive Forest" 1 2 2 1 1 1 "Mt. Freeze" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(205 "Forretress" "Bug" "Steel" "Sturdy" "Ground" "Cryptic Forest" 1 2 2 1 1 1 "N/A" "N/A" "Pineco" "31" "N/A" ))
+(insert-records :into [pokemon] :values '(206 "Dunsparce" "Normal" "None" "Serene Grace/Run Away" "Ground" "Echo Cave" 1 1 1 1 1 1 "Great Canyon" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(207 "Gligar" "Ground" "Flying" "Hyper Cutter/Sand Veil" "Float" "Mt. Deepgreen" 4 3 4 3 4 1 "Mt. Thunder" "7-10" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(208 "Steelix" "Steel" "Ground" "Rock Head/Sturdy" "Ground" "Boulder Cave" 4 3 3 2 2 4 "N/A" "N/A" "Onix" "N/A" "Metal Coat  Link Cable" ))
+(insert-records :into [pokemon] :values '(209 "Snubbull" "Normal" "None" "Intimidate/Run Away" "Ground" "Sky Blue Plains" 2 2 2 2 2 1 "Western Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(210 "Granbull" "Normal" "None" "Intimidate" "Ground" "Sky Blue Plains" 2 3 2 2 2 1 "N/A" "N/A" "Snubbull" "23" "N/A" ))
+(insert-records :into [pokemon] :values '(211 "Qwilfish" "Water" "Poison" "Poison Point/Swift Swim" "Water" "Serene Sea" 2 3 2 3 2 1 "Silver Trench" "1-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(212 "Scizor" "Bug" "Steel" "Swarm" "Ground" "Overgrown Forest" 2 3 1 2 1 1 "N/A" "N/A" "Scyther" "N/A" "Metal Coat  Link Cable" ))
+(insert-records :into [pokemon] :values '(213 "Shuckle" "Bug" "Rock" "Sturdy" "Ground" "Mt. Deepgreen" 3 2 3 2 3 1 "Mt. Blaze" "5-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(214 "Heracross" "Bug" "Fighting" "Swarm/Guts" "Ground" "Overgrown Forest" 1 1 1 1 1 1 "Great Canyon" "7-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(215 "Sneasel" "Dark" "Ice" "Inner Focus/Keen Eye" "Ground" "Darkness Ridge" 2 4 4 4 4 1 "Buried Relic" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(216 "Teddiursa" "Normal" "None" "Pickup" "Ground" "Mt. Deepgreen" 1 1 1 1 1 1 "Silent Chasm" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(217 "Ursaring" "Normal" "None" "Guts" "Ground" "Mt. Deepgreen" 3 3 3 3 3 1 "N/A" "N/A" "Teddiursa" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(218 "Slugma" "Fire" "None" "Magma Armor/Flame Body" "Magma" "Crater" 3 2 3 3 3 1 "Mt. Blaze" "1-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(219 "Magcargo" "Fire" "Rock" "Magma Armor/Flam Body" "Magma" "Crater" 3 3 2 3 2 1 "N/A" "N/A" "Slugma" "38" "N/A" ))
+(insert-records :into [pokemon] :values '(220 "Swinub" "Ice" "Ground" "Oblivious" "Ground" "Frigid Cavern" 1 1 1 1 1 1 "Sinister Woods" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(221 "Piloswine" "Ice" "Ground" "Oblivious" "Ground" "Frigid Cavern" 1 1 1 1 1 1 "N/A" "N/A" "Swinub" "33" "N/A" ))
+(insert-records :into [pokemon] :values '(222 "Corsola" "Water" "Rock" "Hustle/Natural Cure" "Water" "Shallow Beach" 3 3 2 2 2 1 "Silver Trench" "5-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(223 "Remoraid" "Water" "None" "Hustle" "Water" "Treasure Sea" 3 2 3 1 3 1 "Silver Trench" "50-59" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(224 "Octillery" "Water" "None" "Suction Cups" "Water" "Treasure Sea" 3 3 2 2 2 1 "Silver Trench" "60-69" "Remoraid" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(225 "Delibird" "Ice" "Flying" "Vital Spirit/Hustle" "Ground" "Frigid Cavern" 4 3 4 3 4 1 "Northwind Field" "17-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(226 "Mantine" "Water" "Flying" "Swift Swim/Water Absorb" "Float" "Serene Sea" 4 4 4 4 4 2 "Grand Sea" "30  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(227 "Skarmory" "Steel" "Flying" "Keen Eye/Sturdy" "Ground" "Ravaged Field" 3 1 2 2 2 1 "Western Cave" "40-49" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(228 "Houndour" "Dark" "Fire" "Early Bird/Flash Fire" "Magma" "Ravaged Field" 2 1 2 1 2 1 "Silent Chasm" "5-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(229 "Houndoom" "Dark" "Fire" "Early Bird/Flash Fire" "Magma" "Ravaged Field" 2 2 2 2 2 1 "N/A" "N/A" "Houndour" "24" "N/A" ))
+(insert-records :into [pokemon] :values '(230 "Kingdra" "Water" "Dragon" "Swift Swim" "Water" "Treasure Sea" 4 3 2 3 2 1 "N/A" "N/A" "Seadra" "N/A" "Dragon Scale  Link Cable" ))
+(insert-records :into [pokemon] :values '(231 "Phanpy" "Ground" "None" "Pickup" "Ground" "Safari" 2 2 3 1 3 1 "Great Canyon" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(232 "Donphan" "Ground" "None" "Sturdy" "Ground" "Safari" 2 2 2 2 1 1 "N/A" "N/A" "Phanpy" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(233 "Porygon2" "Normal" "None" "Trace" "Water" "Decrepit Lab" 2 3 1 3 1 1 "Wish Cave" "79-84" "Porygon" "N/A" "Upgrade  Link Cable" ))
+(insert-records :into [pokemon] :values '(234 "Stantler" "Normal" "None" "Intimidate" "Ground" "Energetic Forest" 1 2 2 2 2 1 "Mt. Thunder" "5-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(235 "Smeargle" "Normal" "None" "Own Tempo" "Ground" "Sky Blue Plains" 2 3 2 2 2 1 "Rescue  Howling Forest" "15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(236 "Tyrogue" "Fighting" "None" "Guts" "Ground" "Mt. Discipline" 1 1 1 1 1 1 "Mt. Steel" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(237 "Hitmontop" "Fighting" "None" "Intimidate" "Ground" "Mt. Discipline" 2 3 2 3 2 1 "N/A" "N/A" "Tyrogue" "20" "ATK and DEF equal" ))
+(insert-records :into [pokemon] :values '(238 "Smoochum" "Ice" "Psychic" "Oblivious" "Ground" "Frigid Cavern" 2 3 2 3 2 1 "Joyous Tower" "21-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(239 "Elekid" "Electric" "None" "Static" "Ground" "Power Plant" 3 2 3 3 3 1 "Thunderwave Cave" "4-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(240 "Magby" "Fire" "None" "Flame Body" "Magma" "Crater" 3 2 2 2 2 1 "Mt. Blaze" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(241 "Miltank" "Normal" "None" "Thick Fat" "Ground" "Safari" 4 3 3 3 3 1 "Western Cave" "10  20  30  40  50-53  60-98" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(242 "Blissy" "Normal" "None" "Natural Cure/Serene Grace" "Ground" "Sky Blue Plains" 2 3 2 1 1 1 "N/A" "N/A" "Chansey" "N/A" "IQ 5 Stars" ))
+(insert-records :into [pokemon] :values '(243 "Raikou" "Electric" "None" "Pressure" "Ground" "Sacred Field" 3 3 4 4 4 1 "Lightning Field" "30" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(244 "Entei" "Fire" "None" "Pressure" "Magma" "Sacred Field" 3 4 4 4 4 1 "Fiery Field" "30" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(245 "Suicune" "Water" "None" "Pressure" "Water" "Sacred Field" 4 3 4 3 4 1 "Northwind Field" "30" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(246 "Larvitar" "Rock" "Ground" "Guts" "Ground" "Mt. Cleft" 2 2 2 1 2 1 "Southern Cavern" "16-26" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(247 "Pupitar" "Rock" "Ground" "Shed Skin" "Ground" "Mt. Cleft" 2 2 3 1 2 1 "Mt. Freeze" "3-5" "Larvitar" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(248 "Tyranitar" "Rock" "Dark" "Sand Stream" "Ground" "Mt. Cleft" 2 1 1 1 1 1 "N/A" "N/A" "Pupitar" "55" "N/A" ))
+(insert-records :into [pokemon] :values '(249 "Lugia" "Psychic" "Flying" "Pressure" "Water" "Deep-Sea Current" 4 3 4 3 4 4 "Silver Trench" "99" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(250 "Ho-Oh" "Fire" "Flying" "Pressure" "Float" "Rainbow Peak" 4 4 3 4 4 4 "Mt. Faraway" "40" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(251 "Celebi" "Psychic" "Grass" "Natural Cure" "Float" "Healing Forest" 3 2 2 2 2 1 "Purity Forest" "99" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(252 "Treeko" "Grass" "None" "Overgrow" "Ground" "Overgrown Forest" 2 4 4 4 4 1 "Joyous Tower" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(253 "Grovyle" "Grass" "None" "Overgrow" "Ground" "Overgrown Forest" 3 4 4 4 4 1 "Western Cave" "38-49" "Treeko" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(254 "Sceptile" "Grass" "None" "Overgrow" "Ground" "Overgrown Forest" 4 4 4 4 4 1 "N/A" "N/A" "Grovyle" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(255 "Torchic" "Fire" "None" "Blaze" "Magma" "Scorched Plains" 3 4 3 4 4 1 "Joyous Tower" "11-15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(256 "Combusken" "Fire" "Fighting" "Blaze" "Magma" "Scorched Plains" 4 3 3 4 3 1 "Fiery Field" "22-29" "Torchic" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(257 "Blaziken" "Fire" "Fighting" "Blaze" "Magma" "Scorched Plains" 4 3 3 4 3 1 "N/A" "N/A" "Combusken" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(258 "Mudkip" "Water" "None" "Torrent" "Water" "Peanut Swamp" 3 3 4 4 4 1 "Waterfall Pond" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(259 "Marshtomp" "Water" "Ground" "Torrent" "Water" "Peanut Swamp" 3 3 3 3 3 1 "Mt. Faraway" "10-19" "Mudkip" "16" "N/A" ))
+(insert-records :into [pokemon] :values '(260 "Swampert" "Water" "Ground" "Torrent" "Water" "Peanut Swamp" 4 3 3 3 3 1 "West Cave" "79-88" "Marshtomp" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(261 "Poochyena" "Dark" "None" "Run Away" "Ground" "Wild Plains" 1 1 3 2 3 1 "Thunderwave Cave" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(262 "Mightyena" "Dark" "None" "Intimidate" "Ground" "Wild Plains" 1 1 2 1 2 1 "N/A" "N/A" "Poochyena" "Level 18" "N/A" ))
+(insert-records :into [pokemon] :values '(263 "Zigzagoon" "Normal" "None" "Pickup" "Ground" "Wild Plains" 1 1 1 1 1 1 "Mt. Steel" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(264 "Linoone" "Normal" "None" "Pickup" "Ground" "Wild Plains" 1 1 1 1 1 1 "N/A" "N/A" "Zigzagoon" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(265 "Wurmple" "Bug" "None" "Shield Dust" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Joyous Tower" "1-2" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(266 "Silcoon" "Bug" "None" "Shed Skin" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Sinister Woods" "4-6" "Wurmple" "7" "N/A" ))
+(insert-records :into [pokemon] :values '(267 "Beautifly" "Bug" "Flying" "Swarm" "Float" "Mist-Rise Forest" 1 1 2 1 2 1 "N/A" "N/A" "Silcoon" "10" "N/A" ))
+(insert-records :into [pokemon] :values '(268 "Cascoon" "Bug" "None" "Shed Skin" "Ground" "Mist-Rise Forest" 1 1 1 1 1 1 "Sinister Woods" "4-6" "Wurmple" "7" "N/A" ))
+(insert-records :into [pokemon] :values '(269 "Dustox" "Bug" "Poison" "Shield Dust" "Float" "Mist-Rise Forest" 1 1 1 1 1 1 "N/A" "N/A" "Cascoon" "10" "N/A" ))
+(insert-records :into [pokemon] :values '(270 "Lotad" "Water" "Grass" "Swift Swim/Rain Dish" "Water" "Tadpole Pond" 1 2 2 2 2 1 "Waterfall Pond" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(271 "Lombre" "Water" "Grass" "Swift Swim/Rain Dish" "Water" "Tadpole Pond" 2 3 3 3 4 1 "Waterfall Pond" "13-16" "Lotad" "14" "N/A" ))
+(insert-records :into [pokemon] :values '(272 "Ludicolo" "Water" "Grass" "Swift Swim/Rain Dish" "Water" "Tadpole Pond" 3 4 4 4 4 1 "N/A" "N/A" "Lombre" "N/A" "Water Stone" ))
+(insert-records :into [pokemon] :values '(273 "Seedot" "Grass" "None" "Chlorophyll/Early Bird" "Ground" "Mushroom Forest" 1 2 2 2 2 1 "Uproar Forest" "1-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(274 "Nuzleaf" "Grass" "Dark" "Chlorophyll/Early Bird" "Ground" "Mushroom Forest" 1 2 2 2 2 1 "Uproar Forest" "5-9" "Seedot" "14" "N/A" ))
+(insert-records :into [pokemon] :values '(275 "Shiftry" "Grass" "Dark" "Chlorophyll/Early Bird" "Ground" "Mushroom Forest" 3 3 3 3 3 1 "Western Cave" "15-20" "Nuzleaf" "N/A" "Leaf Stone" ))
+(insert-records :into [pokemon] :values '(276 "Taillow" "Normal" "Flying" "Guts" "Ground" "Beau Plains" 1 2 2 2 2 1 "Joyous Tower" "2-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(277 "Swellow" "Normal" "Flying" "Guts" "Ground" "Beau Plains" 2 3 3 3 2 1 "N/A" "N/A" "Taillow" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(278 "Wingull" "Water" "Flying" "Keen Eye" "Float" "Shallow Beach" 2 3 3 3 3 1 "Stormy Sea" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(279 "Pelipper" "Water" "Flying" "Keen Eye" "Float" "Shallow Beach" 3 3 3 3 4 1 "N/A" "N/A" "Wingull" "25" "N/A" ))
+(insert-records :into [pokemon] :values '(280 "Ralts" "Psychic" "None" "Synchronize/Trace" "Ground" "Sky Blue Plains" 1 2 2 2 2 1 "Wish Cave" "11-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(281 "Kirlia" "Psychic" "None" "Synchronize/Trace" "Ground" "Sky Blue Plains" 1 3 3 3 3 1 "Solar Cave" "10-15" "Ralts" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(282 "Gardevoir" "Psychic" "None" "Synchronize/Trace" "Ground" "Sky Blue Plains" 1 3 3 3 3 1 "N/A" "N/A" "Kirlia" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(283 "Surskit" "Bug" "Water" "Swift Swim" "Water" "Tadpole Pond" 2 3 3 3 3 1 "Waterfall Pond" "4-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(284 "Masquerain" "Bug" "Flying" "Intimidate" "Float" "Tadpole Pond" 1 3 2 3 2 1 "N/A" "N/A" "Surskit" "22" "N/A" ))
+(insert-records :into [pokemon] :values '(285 "Shroomish" "Grass" "None" "Effect Spore" "Ground" "Mushroom Forest" 1 1 1 1 1 1 "Sinister Woods" "6-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(286 "Breloom" "Grass" "Fighting" "Effect Spore" "Ground" "Mushroom Forest" 1 1 1 1 1 1 "N/A" "N/A" "Shroomish" "23" "N/A" ))
+(insert-records :into [pokemon] :values '(287 "Slakoth" "Normal" "None" "Truant" "Ground" "Energetic Forest" 1 2 2 1 1 1 "Sinister Woods" "10-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(288 "Vigoroth" "Normal" "None" "Vital Spirit" "Ground" "Energetic Forest" 1 2 2 1 1 1 "Mt. Freeze" "7-11" "Slakoth" "18" "N/A" ))
+(insert-records :into [pokemon] :values '(289 "Slaking" "Normal" "None" "Truant" "Ground" "Energetic Forest" 2 3 1 2 1 1 "N/A" "N/A" "Vigoroth" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(290 "Nincada" "Bug" "Ground" "Compundeyes" "Ground" "Secretive Forest" 1 1 1 1 1 1 "Lapis Cave" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(291 "Ninjask" "Bug" "Flying" "Speed Boost" "Float" "Secretive Forest" 2 3 2 3 2 1 "N/A" "N/A" "Nincada" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(292 "Shedinja" "Bug" "Ghost" "Wonder Guard" "Wall" "Secretive Forest" 0 0 1 0 1 1 "N/A" "N/A" "Nincada" "20" "Crytic Forest friend area NOT full" ))
+(insert-records :into [pokemon] :values '(293 "Whismur" "Normal" "None" "Soundproof" "Ground" "Echo Cave" 2 2 3 1 3 1 "Howling Forest" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(294 "Loudred" "Normal" "None" "Soundproof" "Ground" "Echo Cave" 2 2 2 2 2 1 "Howling Forest" "9-14" "Whismur" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(295 "Exploud" "Normal" "None" "Soundproof" "Ground" "Echo Cave" 3 2 2 2 2 1 "N/A" "N/A" "Loudred" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(296 "Makuhita" "Fighting" "None" "Thick Fat/Guts" "Ground" "Mt. Discipline" 2 4 4 2 3 1 "Buried Relic" "30-34" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(297 "Hariyama" "Fighting" "None" "Thick Fat/Guts" "Ground" "Mt. Discipline" 3 3 4 2 3 1 "N/A" "N/A" "Makuhita" "24" "N/A" ))
+(insert-records :into [pokemon] :values '(298 "Azurill" "Normal" "None" "Thick Fat/Huge Power" "Water" "Turtleshell Pond" 1 1 1 1 1 1 "Frosty Forest" "1-3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(299 "Nosepass" "Rock" "None" "Sturdy/Magnet Pull" "Ground" "Echo Cave" 2 3 3 3 4 1 "Frosty Forest" "3-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(300 "Skitty" "Normal" "None" "Cute Charm" "Ground" "Energetic Forest" 3 4 4 3 4 1 "Joyous Tower" "24-28" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(301 "Delcatty" "Normal" "None" "Cute Charm" "Ground" "Enegetic Forest" 3 4 4 3 4 1 "N/A" "N/A" "Skitty" "N/A" "Moon Stone" ))
+(insert-records :into [pokemon] :values '(302 "Sableye" "Dark" "Ghost" "Keen Eye" "Ground" "Darkness Ridge" 3 3 2 2 2 1 "Darknight Relic" "1-15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(303 "Mawile" "Steel" "None" "Hyper Cutter/Intimidate" "Ground" "Echo Cave" 3 2 3 2 4 1 "Magma Cavern" "8-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(304 "Aron" "Steel" "Rock" "Sturdy/Rock Head" "Ground" "Mt. Cleft" 1 2 2 2 2 1 "Mt. Steel" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(305 "Lairon" "Steel" "Rock" "Sturdy/Rock Head" "Ground" "Mt. Cleft" 1 2 2 2 2 1 "Frosy Forest" "7-9" "Aron" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(306 "Aggron" "Steel" "Rock" "Sturdy/Rock Head" "Ground" "Mt. Cleft" 3 2 2 1 2 1 "N/A" "N/A" "Lairon" "42" "N/A" ))
+(insert-records :into [pokemon] :values '(307 "Meditite" "Fighting" "Psychic" "Pure Power" "Float" "Mt. Discipline" 2 3 2 2 2 1 "Mt. Steel" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(308 "Medicham" "Fighting" "Psychic" "Pure Power" "Ground" "Mt. Discipline" 2 3 3 3 3 1 "N/A" "N/A" "Meditite" "37" "N/A" ))
+(insert-records :into [pokemon] :values '(309 "Electrike" "Electric" "None" "Static/Lightningrod" "Ground" "Thunder Meadow" 3 2 3 2 3 1 "Mt. Thunder" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(310 "Manectric" "Electric" "None" "Static/Lightningrod" "Ground" "Thunder Meadow" 3 3 3 3 3 1 "N/A" "N/A" "Electrike" "26" "N/A" ))
+(insert-records :into [pokemon] :values '(311 "Plusle" "Electric" "None" "Plus" "Ground" "Thunder Meadow" 4 3 3 3 3 1 "Thunderwave Cave" "4-5  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(312 "Minun" "Electric" "None" "Minus" "Ground" "Thunder Meadow" 4 3 3 3 3 1 "Thunderwave Cave" "4-5  Blue Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(313 "Volbeat" "Bug" "None" "Illuminate/Swarm" "Ground" "Rub-a-Dub River" 3 2 3 1 3 1 "Northwind Field" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(314 "Illumise" "Bug" "None" "Oblivious" "Ground" "Rub-a-Dub River" 1 1 1 1 1 1 "Lapis Cave" "5-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(315 "Roselia" "Grass" "Poison" "Natural Cure/Poison Point" "Ground" "Beau Plains" 1 1 1 1 1 1 "Uproar Forest" "4-7  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(316 "Gulpin" "Poison" "None" "Liquid Ooze/Sticky Hold" "Ground" "Poison Swamp" 2 1 2 1 2 1 "Buried Relic" "14  16-19" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(317 "Swalot" "Poison" "None" "Liquid Ooze/Sticky Hold" "Ground" "Poison Swamp" 3 2 2 1 2 1 "N/A" "N/A" "Gulpin" "26" "N/A" ))
+(insert-records :into [pokemon] :values '(318 "Carvanha" "Water" "Dark" "Rough Skin" "Water" "Treasure Sea" 3 2 2 2 2 1 "Stormy Sea" "35-39" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(319 "Sharpedo" "Water" "Dark" "Rough Skin" "Water" "Treasure Sea" 3 2 3 2 2 1 "N/A" "N/A" "Carvanha" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(320 "Wailmer" "Water" "None" "Water Veil/Oblivious" "Water" "Serene Sea" 3 3 2 2 2 1 "Silver Trench" "41-50" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(321 "Wailord" "Water" "None" "Water Veil/Oblivious" "Water" "Serene Sea" 3 3 2 2 2 4 "N/A" "N/A" "Wailmer" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(322 "Numel" "Fire" "Ground" "Oblivious" "Magma" "Crater" 2 2 3 2 3 1 "Mt. Blaze" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(323 "Camerupt" "Fire" "Ground" "Magma Armor" "Magma" "Crater" 3 2 2 2 2 1 "N/A" "N/A" "Numel" "33" "N/A" ))
+(insert-records :into [pokemon] :values '(324 "Torkoal" "Fire" "None" "White Smoke" "Magma" "Crater" 3 3 3 3 3 1 "Mt. Blaze" "7-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(325 "Spoink" "Psychic" "None" "Thick Fat/Own Tempo" "Ground" "Mt. Deepgreen" 2 3 3 2 3 1 "Howling Forest" "1-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(326 "Grumpig" "Psychic" "None" "Thick Fat/Own Tempo" "Ground" "Mt. Deepgreen" 3 2 2 2 2 1 "N/A" "N/A" "Spoink" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(327 "Spinda" "Normal" "None" "Own Tempo" "Ground" "Mt. Deepgreen" 1 1 2 1 2 1 "Joyous Tower" "5-7" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(328 "Trapinch" "Ground" "None" "Hyper Cutter/Arena Trap" "Ground" "Furnace Desert" 2 1 2 1 2 1 "Silent Chasm" "6-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(329 "Vibrava" "Ground" "Dragon" "Levitate" "Float" "Furnace Desert" 2 2 2 2 2 1 "Wyvern Hill" "10-16" "Trapinch" "35" "N/A" ))
+(insert-records :into [pokemon] :values '(330 "Flygon" "Ground" "Dragon" "Levitate" "Float" "Furnace Desert" 2 1 2 1 2 1 "N/A" "N/A" "Vibrava" "45" "N/A" ))
+(insert-records :into [pokemon] :values '(331 "Cacnea" "Grass" "None" "Sand Veil" "Ground" "Furnace Desert" 1 1 1 1 1 1 "Mt. Thunder" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(332 "Cacturne" "Grass" "Dark" "Sand Veil" "Ground" "Furnace Desert" 2 1 2 1 2 1 "N/A" "N/A" "Cacnea" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(333 "Swablu" "Normal" "Flying" "Natural Cure" "Float" "Flyaway Forest" 2 3 3 3 3 1 "Mt. Freeze" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(334 "Altaria" "Dragon" "Flying" "Natural Cure" "Float" "Flyaway Forest" 3 3 2 3 2 1 "N/A" "N/A" "Swablu" "35" "N/A" ))
+(insert-records :into [pokemon] :values '(335 "Zangoose" "Normal" "None" "Immunity" "Ground" "Wild Plains" 3 3 3 3 4 1 "Mt. Freeze" "7-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(336 "Seviper" "Poison" "None" "Shed Skin" "Ground" "Wild Plains" 4 4 4 3 4 1 "Mt. Freeze" "13-15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(337 "Lunatone" "Rock" "Psychic" "Levitate" "Float" "Mt. Moonview" 2 1 1 1 1 1 "Sky Tower" "1-11" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(338 "Solrock" "Rock" "Psychic" "Levitiate" "Float" "Mt. Moonview" 2 1 1 1 1 1 "Sky Tower" "12-20" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(339 "Barboach" "Water" "Ground" "Oblivious" "Water" "Peanut Swamp" 2 2 2 2 2 1 "Waterfall Pond" "1-5" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(340 "Wishcash" "Water" "Ground" "Oblivious" "Water" "Peanut Swamp" 3 2 2 2 2 1 "N/A" "N/A" "Barboach" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(341 "Corphish" "Water" "None" "Hyper Cutter/Shell Armor" "Water" "Turtleshell Pond" 2 3 3 3 3 1 "Waterfall Pond" "6-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(342 "Crawdaunt" "Water" "Dark" "Hyper Cutter/Shell Armor" "Water" "Turtleshell Pond" 3 3 3 3 3 1 "N/A" "N/A" "Corphish" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(343 "Baltoy" "Ground" "Psychic" "Levitate" "Float" "Ancient Relic" 2 2 2 2 2 1 "Mt. Steel" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(344 "Claydol" "Ground" "Psychic" "Levitate" "Float" "Ancient Relic" 2 2 2 2 2 1 "N/A" "N/A" "Baltoy" "36" "N/A" ))
+(insert-records :into [pokemon] :values '(345 "Lileep" "Rock" "Grass" "Suction Cups" "Ground" "Deep-Sea Floor" 2 1 1 1 1 1 "Silver Trench" "80-89" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(346 "Cradily" "Rock" "Grass" "Suction Cups" "Ground" "Deep-Sea Floor" 3 1 1 1 1 1 "Silver Trench" "90-98" "Lileep" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(347 "Anorith" "Rock" "Bug" "Battle Armor" "Ground" "Treasure Sea" 3 3 2 2 2 1 "Stormy Sea" "9-17" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(348 "Armaldo" "Rock" "Bug" "Battle Armor" "Ground" "Treasure Sea" 3 3 3 3 3 1 "N/A" "N/A" "Anorith" "40" "N/A" ))
+(insert-records :into [pokemon] :values '(349 "Feebas" "Water" "None" "Swift Swim" "Water" "Waterfall Lake" 1 1 1 1 1 1 "Waterfall Pond" "16-19  Red Only" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(350 "Milotic" "Water" "None" "Marvel Scale" "Water" "Waterfall Lake" 4 2 2 2 2 4 "N/A" "N/A" "Feebas" "N/A" "Beauty Scarf" ))
+(insert-records :into [pokemon] :values '(351 "Castform" "Normal" "None" "Forecaste" "Ground" "Thunder Meadow" 2 2 3 1 3 1 "Mt. Faraway" "20-29" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(352 "Kecleon" "Normal" "None" "Color Change" "Ground" "Overgrown Forest" 3 3 4 2 4 1 "Kecleon Shop (Dungeon)" "N/A" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(353 "Shuppet" "Ghost" "None" "Insomnia" "Wall" "Darkness Ridge" 2 2 2 2 2 1 "Sky Tower" "1-6" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(354 "Banette" "Ghost" "None" "Insomnia" "Wall" "Darkness Ridge" 2 3 2 3 2 1 "N/A" "N/A" "Shuppet" "37" "N/A" ))
+(insert-records :into [pokemon] :values '(355 "Duskull" "Ghost" "None" "Levitate" "Wall" "Darkness Ridge" 3 1 2 1 2 1 "Sky Tower" "7-14" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(356 "Dusclops" "Ghost" "None" "Pressure" "Ground" "Darkness Ridge" 3 2 2 2 2 1 "N/A" "N/A" "Duskull" "37" "N/A" ))
+(insert-records :into [pokemon] :values '(357 "Tropius" "Grass" "Flying" "Chlorophyll" "Ground" "Jungle" 3 2 2 2 2 1 "Sky Tower" "22-25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(358 "Chimecho" "Psychic" "None" "Levitate" "Float" "Thunder Meadow" 2 1 3 1 3 1 "Mt. Freeze" "7-12" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(359 "Absol" "Dark" "None" "Pressure" "Ground" "Darkness Ridge" 3 2 1 2 1 1 "Northwind Field" "28-29" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(360 "Wynaut" "Psychic" "None" "Shadow Tag" "Ground" "Echo Cave" 2 2 1 2 1 1 "Buried Relic" "1-4" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(361 "Snorunt" "Ice" "None" "Inner Focus" "Ground" "Frigid Cavern" 1 3 1 3 1 1 "Frosty Forest" "8-9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(362 "Glalie" "Ice" "None" "Inner Focus" "Ground" "Frigid Cavern" 3 2 2 2 2 1 "N/A" "N/A" "Snorunt" "42" "N/A" ))
+(insert-records :into [pokemon] :values '(363 "Spheal" "Ice" "Water" "Thick Fat" "Water" "Ice Floe Beach" 2 3 3 3 2 1 "Stormy Sea" "15-24" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(364 "Sealeo" "Ice" "Water" "Thick Fat" "Water" "Ice Floe Beach" 3 3 3 3 3 1 "Stormy Sea" "34-39" "Spheal" "32" "N/A" ))
+(insert-records :into [pokemon] :values '(365 "Walrein" "Ice" "Water" "Thick Fat" "Water" "Ice Floe Beach" 4 3 3 3 3 1 "N/A" "N/A" "Sealeo" "44" "N/A" ))
+(insert-records :into [pokemon] :values '(366 "Clamperl" "Water" "None" "Shell Armor" "Water" "Deep-Sea Floor" 3 2 2 1 2 1 "Silver Trench" "65-79" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(367 "Huntail" "Water" "None" "Swift Swim" "Water" "Deep-Sea Floor" 4 3 2 3 2 1 "N/A" "N/A" "Clamperl" "N/A" "Deepseatooth  Link Cable" ))
+(insert-records :into [pokemon] :values '(368 "Gorebyss" "Water" "None" "Swift Swim" "Water" "Deep-Sea Floor" 3 2 2 2 2 1 "N/A" "N/A" "Calmperl" "N/A" "Deepseascale  Link Cable" ))
+(insert-records :into [pokemon] :values '(369 "Relicanth" "Water" "Rock" "Swift Swim/Rock Head" "Water" "Deep-Sea Floor" 4 3 3 3 4 1 "Silver Trench" "80-89" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(370 "Luvdisc" "Water" "None" "Swift Swim" "Water" "Treasure Sea" 3 3 2 2 2 1 "Silver Trench" "45-54" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(371 "Bagon" "Dragon" "None" "Rock Head" "Ground" "Dragon Cave" 2 1 2 1 2 1 "Lapis Cave" "9-13" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(372 "Shelgon" "Dragon" "None" "Rock Head" "Ground" "Dragon Cave" 3 1 2 1 2 1 "Mt. Freeze" "1-6" "Bagon" "30" "N/A" ))
+(insert-records :into [pokemon] :values '(373 "Salamence" "Dragon" "Flying" "Intimidate" "Ground" "Dragon Cave" 4 2 3 2 3 2 "N/A" "N/A" "Shelgon" "50" "N/A" ))
+(insert-records :into [pokemon] :values '(374 "Beldum" "Steel" "Psychic" "Clear Body" "Float" "Magnetic Quarry" 2 1 3 1 2 1 "Mt. Steel" "6-8" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(375 "Metang" "Steel" "Psychic" "Clear Body" "Float" "Magnetic Quarry" 2 3 4 1 4 1 "Frosy Forest" "1-4" "Beldum" "20" "N/A" ))
+(insert-records :into [pokemon] :values '(376 "Metagross" "Steel" "Psychic" "Clear Body" "Ground" "Magnetic Quarry" 2 3 3 3 4 2 "N/A" "N/A" "Metang" "45" "N/A" ))
+(insert-records :into [pokemon] :values '(377 "Regirock" "Rock" "None" "Clear Body" "Ground" "Ancient Relic" 2 4 4 4 4 1 "Buried Relic" "15" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(378 "Regice" "Ice" "None" "Clear Body" "Ground" "Ancient Relic" 2 4 4 3 4 1 "Buried Relic" "25" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(379 "Registeel" "Steel" "None" "Clear Body" "Ground" "Ancient Relic" 3 3 4 3 4 1 "Buried Relic" "35" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(380 "Latias" "Dragon" "Psychic" "Levitate" "Float" "Southern Island" 3 3 3 3 4 1 "Pitfall Valley" "N/A" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(381 "Latios" "Dragon" "Psychic" "Levitate" "Float" "Southern Island" 3 3 3 3 4 2 "Northern Range" "N/A" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(382 "Kyogre" "Water" "None" "Drizzle" "Water" "Seafloor Cave" 3 3 4 3 4 4 "Stormy Sea" "40" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(383 "Groudon" "Ground" "None" "Drought" "Magma" "Volcanic Pit" 4 3 3 3 3 4 "Magma Cavern Pit" "3" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(384 "Rayquaza" "Dragon" "Flying" "Air Lock" "Float" "Stratos Lookout" 4 3 3 3 4 4 "Sky Tower Summit" "9" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(385 "Jirachi" "Steel" "Psychci" "Serene Grace" "Float" "Mt. Moonview" 3 2 3 2 4 1 "Wish Cave" "99" "N/A" "N/A" "N/A" ))
+(insert-records :into [pokemon] :values '(386 "Deoxys" "Psychic" "None" "Pressure" "Float" "Enclosed Island" 4 4 4 4 4 1 "Meteor Cave" "20" "N/A" "N/A" "N/A" ))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\clsql-mysql.asd clsql\clsql-mysql.asd
--- clsql-3.7.4\clsql-mysql.asd	Fri Nov 25 10:41:52 2005
+++ clsql\clsql-mysql.asd	Mon Oct 02 15:52:37 2006
@@ -16,7 +16,11 @@
 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
 ;;;; *************************************************************************
 
-(defpackage #:clsql-mysql-system (:use #:asdf #:cl))
+(defpackage #:clsql-mysql-system 
+  (:use #:asdf #:cl)
+  (:export
+   #:*library-file-dir*))
+
 (in-package #:clsql-mysql-system)
 
 (eval-when (:compile-toplevel :load-toplevel :execute)
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\clsql-sqlite3.asd clsql\clsql-sqlite3.asd
--- clsql-3.7.4\clsql-sqlite3.asd	Mon Dec 06 23:11:56 2004
+++ clsql\clsql-sqlite3.asd	Thu Aug 31 18:48:30 2006
@@ -35,4 +35,5 @@
 	    ((:file "sqlite3-package")
 	     (:file "sqlite3-loader" :depends-on ("sqlite3-package"))
 	     (:file  "sqlite3-api" :depends-on ("sqlite3-loader"))
-	     (:file "sqlite3-sql" :depends-on ("sqlite3-api"))))))
+	     (:file "sqlite3-sql" :depends-on ("sqlite3-api"))
+         (:file "sqlite3-objects" :depends-on ("sqlite3-package"))))))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\clsql.asd clsql\clsql.asd
--- clsql-3.7.4\clsql.asd	Mon Sep 04 21:31:02 2006
+++ clsql\clsql.asd	Tue Oct 10 10:16:22 2006
@@ -65,8 +65,7 @@
 	       (:module syntax
 			:pathname ""
 			:components ((:file "expressions")
-				     (:file "operations"
-                                            :depends-on ("expressions"))
+				     (:file "operations" :depends-on ("expressions"))
 				     (:file "syntax" :depends-on ("operations")))
 			:depends-on (database))
 	       (:module functional
@@ -78,12 +77,19 @@
                                             :depends-on ("fdml" #+clisp "ansi-loop"))
 				     (:file "fddl" :depends-on ("fdml")))
 			:depends-on (syntax))
+           #-cormanlisp
 	       (:module object
 			:pathname ""
 			:components ((:file "metaclasses")
 				     (:file "ooddl" :depends-on ("metaclasses"))
 				     (:file "oodml" :depends-on ("ooddl")))
 			:depends-on (functional))
+           #+cormanlisp
+	       (:module object
+			:pathname "corman/"
+			:components ((:file "select")
+                         (:file "types"))
+			:depends-on (functional))
 	       (:module generic
 			:pathname ""
 			:components ((:file "generic-postgresql")
Binary files clsql-3.7.4\db-mysql\clsql_mysql.dll and clsql\db-mysql\clsql_mysql.dll differ
Binary files clsql-3.7.4\db-mysql\libmySQL.dll and clsql\db-mysql\libmySQL.dll differ
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-mysql\make.sh clsql\db-mysql\make.sh
--- clsql-3.7.4\db-mysql\make.sh	Wed Dec 31 16:00:00 1969
+++ clsql\db-mysql\make.sh	Thu Aug 03 09:00:45 2006
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+case "`uname`" in
+    Linux) os_linux=1 ;;
+    GNU) os_linux=1 ;;
+    FreeBSD) os_freebsd=1 ;;
+    GNU/kFreeBSD) os_gnukfreebsd=1;;
+    Darwin) os_darwin=1 ;;
+    SunOS) os_sunos=1 ;;
+    AIX) os_aix=1 ;;
+    *) echo "Unable to identify uname " `uname`
+       exit 1 ;;	
+esac
+    
+if [ "$os_linux" -o "$os_freebsd" -o "$os_gnukfreebsd" ]; then
+    gcc $CFLAGS -fPIC -c $SOURCE -o $OBJECT
+    ld -shared -soname=$BASE  $OBJECT $LDFLAGS -o $SHARED_LIB
+elif [ "$os_darwin" ]; then
+    cc $CFLAGS -dynamic -c $SOURCE -o $OBJECT
+    ld -bundle /usr/lib/bundle1.o -flat_namespace -undefined suppress -o $BASE.dylib $OBJECT
+    ld -bundle /usr/lib/bundle1.o $LDFLAGS -flat_namespace -undefined suppress /usr/lib/libz.dylib -o z.dylib
+
+elif [ "$os_sunos" ]; then
+    cc $CFLAGS -KPIC -c $SOURCE -o $OBJECT
+    cc -G $OBJECT $LDFLAGS -o $SHARED_LIB
+
+elif [ "$os_aix" ]; then
+    gcc $CFLAGS -c -D_BSD -D_NO_PROTO -D_NONSTD_TYPES -D_MBI=void $SOURCE
+    make_shared $LDFLAGS -o $SHARED_LIB $OBJECT
+fi
+
+exit 0
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-mysql\mysql-loader.lisp clsql\db-mysql\mysql-loader.lisp
--- clsql-3.7.4\db-mysql\mysql-loader.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\db-mysql\mysql-loader.lisp	Thu Oct 05 21:29:37 2006
@@ -7,7 +7,7 @@
 ;;;; Author:   Kevin M. Rosenberg
 ;;;; Created:  Feb 2002
 ;;;;
-;;;; $Id: mysql-loader.lisp 11102 2006-09-06 12:51:12Z kevin $
+;;;; $Id: mysql-loader.lisp 11084 2006-08-31 15:20:13Z kevin $
 ;;;;
 ;;;; This file, part of CLSQL, is Copyright (c) 2002-2004 by Kevin M. Rosenberg
 ;;;;
@@ -18,13 +18,12 @@
 
 (in-package #:mysql)
 
-;; searches clsql_mysql64 to accomodate both 32-bit and 64-bit libraries on same system
 (defparameter *clsql-mysql-library-candidate-names*
-  `(,@(when (> most-positive-fixnum (expt 2 32)) (list "clsql_mysql64"))
+  (list #+(or 64bit x86-64) "clsql_mysql64"
     "clsql_mysql"))
 
 (defvar *mysql-library-candidate-names*
-  '("libmysqlclient" "libmysql"))
+  '("libmysql" "libmysqlclient"))
 
 (defvar *mysql-supporting-libraries* '("c")
   "Used only by CMU. List of library flags needed to be passed to ld to
@@ -42,10 +41,12 @@
    (make-pathname :directory clsql-mysql-system::*library-file-dir*))
   (clsql-uffi:find-and-load-foreign-library *mysql-library-candidate-names*
                                             :module "mysql"
-                                            :supporting-libraries *mysql-supporting-libraries*)
+                                            :supporting-libraries *mysql-supporting-libraries*
+                                            :call-type :pascal)
   (clsql-uffi:find-and-load-foreign-library *clsql-mysql-library-candidate-names*
                                             :module "clsql-mysql"
-                                            :supporting-libraries *mysql-supporting-libraries*)
+                                            :supporting-libraries *mysql-supporting-libraries*
+                                            :call-type :c)
   (setq *mysql-library-loaded* t))
 
 
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-mysql\mysql-sql.lisp clsql\db-mysql\mysql-sql.lisp
--- clsql-3.7.4\db-mysql\mysql-sql.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\db-mysql\mysql-sql.lisp	Wed Oct 11 22:20:31 2006
@@ -163,7 +163,8 @@
 				 :connection-spec connection-spec
 				 :server-info (uffi:convert-from-cstring
 					       (mysql:mysql-get-server-info mysql-ptr))
-				 :mysql-ptr mysql-ptr))
+				 :mysql-ptr mysql-ptr
+                 :column-quote #\`))
 	      (when error-occurred (mysql-close mysql-ptr)))))))))
 
 
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-mysql\testing\mysql-struct-size.cc clsql\db-mysql\testing\mysql-struct-size.cc
--- clsql-3.7.4\db-mysql\testing\mysql-struct-size.cc	Wed Dec 31 16:00:00 1969
+++ clsql\db-mysql\testing\mysql-struct-size.cc	Thu Aug 03 09:00:45 2006
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include "/usr/include/mysql/mysql.h"
+
+int main (int argc, char** argv)
+{
+  printf ("Size of MYSQL struct: %ld\n", sizeof (MYSQL));
+  printf("Sizeof MYSQL_BIND: %d\n", sizeof(MYSQL_BIND));
+  printf("Sizeof MYSQL_FIELD: %d\n", sizeof(MYSQL_FIELD));
+  printf("Sizeof MYSQL_TIME: %d\n", sizeof(MYSQL_TIME));
+}
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-odbc\odbc-loader.lisp clsql\db-odbc\odbc-loader.lisp
--- clsql-3.7.4\db-odbc\odbc-loader.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\db-odbc\odbc-loader.lisp	Sat Oct 07 17:37:29 2006
@@ -34,7 +34,7 @@
 				      
 (defmethod clsql-sys:database-type-load-foreign ((database-type (eql :odbc)))
   (clsql-uffi:find-and-load-foreign-library *odbc-library-filenames*
-                                            :module "odbc")
+                                            :module "odbc" :call-type :pascal)
   (setq *odbc-library-loaded* t))
 
 (clsql-sys:database-type-load-foreign :odbc)
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-odbc\odbc-sql.lisp clsql\db-odbc\odbc-sql.lisp
--- clsql-3.7.4\db-odbc\odbc-sql.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\db-odbc\odbc-sql.lisp	Thu Oct 12 08:10:16 2006
@@ -43,6 +43,7 @@
 				 :name (database-name-from-spec connection-spec :odbc)
 				 :database-type :odbc
 				 :dbi-package (find-package '#:odbc-dbi)
+                 :column-quote #\"
 				 :odbc-conn
 				 (odbc-dbi:connect :user user
 						   :password password
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-sqlite3\sqlite3-loader.lisp clsql\db-sqlite3\sqlite3-loader.lisp
--- clsql-3.7.4\db-sqlite3\sqlite3-loader.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\db-sqlite3\sqlite3-loader.lisp	Thu Oct 05 20:53:09 2006
@@ -31,9 +31,10 @@
   *sqlite3-library-loaded*)
 
 (defmethod database-type-load-foreign ((database-type (eql :sqlite3)))
-  (clsql-uffi:find-and-load-foreign-library '("libsqlite3" "sqlite3")
+  (clsql-uffi:find-and-load-foreign-library '("sqlite3" "libsqlite3")
                                             :module "sqlite3"
-                                            :supporting-libraries *sqlite3-supporting-libraries*)
+                                            :supporting-libraries *sqlite3-supporting-libraries*
+                                            :call-type :c)
   (setq *sqlite3-library-loaded* t))
 
 (clsql-sys:database-type-load-foreign :sqlite3)
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-sqlite3\sqlite3-objects.lisp clsql\db-sqlite3\sqlite3-objects.lisp
--- clsql-3.7.4\db-sqlite3\sqlite3-objects.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\db-sqlite3\sqlite3-objects.lisp	Thu Aug 31 19:17:05 2006
@@ -0,0 +1,78 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:     sqlite-objects.lisp
+;;;; Purpose:  High-level SQLite3 interface
+;;;; Authors:  Jay Kint
+;;;; Created:  Sep 2006
+;;;;
+;;;; This file, part of CLSQL, is Copyright (c) 2004 by Jay Kint
+;;;;
+;;;; CLSQL users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+(in-package #:clsql-sqlite3)
+
+(defmethod database-get-type-specifier (type args database db-type)
+  (declare (ignore type args database db-type))
+  "TEXT")
+
+(defmethod database-get-type-specifier ((type (eql 'integer)) args database db-type)
+  (declare (ignore database db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'tinyint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'smallint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'mediumint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'bigint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'varchar)) args
+                                        database db-type)
+  (declare (ignore args database db-type))
+  "TEXT")
+
+(defmethod database-get-type-specifier ((type (eql 'string)) args database db-type)
+  (declare (ignore args database db-type))
+  "TEXT")
+
+(defmethod database-get-type-specifier ((type (eql 'universal-time)) args database db-type)
+  (declare (ignore args database db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'wall-time)) args database db-type)
+  (declare (ignore args database db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'date)) args database db-type)
+  (declare (ignore args database db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'duration)) args database db-type)
+  (declare (ignore args database args db-type))
+  "INTEGER")
+
+(defmethod database-get-type-specifier ((type (eql 'money)) args database db-type)
+  (declare (ignore args database args db-type))
+  "REAL")
+
+(defmethod database-get-type-specifier ((type (eql 'float)) args database db-type)
+  (declare (ignore args database db-type))
+  "REAL")
+
+(defmethod database-get-type-specifier ((type (eql 'long-float)) args database db-type)
+  (declare (ignore args database db-type))
+  "REAL")
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\db-sqlite3\sqlite3-sql.lisp clsql\db-sqlite3\sqlite3-sql.lisp
--- clsql-3.7.4\db-sqlite3\sqlite3-sql.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\db-sqlite3\sqlite3-sql.lisp	Thu Oct 12 08:09:30 2006
@@ -52,7 +52,8 @@
 			 :name (database-name-from-spec connection-spec :sqlite3)
 			 :database-type :sqlite3
 			 :connection-spec connection-spec
-			 :sqlite3-db db))
+			 :sqlite3-db db
+             :column-quote #\"))
       (sqlite3:sqlite3-error (err)
 	(error 'sql-connection-error
 	       :database-type database-type
Binary files clsql-3.7.4\doc\html.tar.gz and clsql\doc\html.tar.gz differ
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\examples\dot.clsql-test.config clsql\examples\dot.clsql-test.config
--- clsql-3.7.4\examples\dot.clsql-test.config	Wed Dec 31 16:00:00 1969
+++ clsql\examples\dot.clsql-test.config	Thu Aug 03 09:00:51 2006
@@ -0,0 +1,14 @@
+;; -*- Mode: Lisp -*-   ;; Emacs mode line
+;;
+;; Example CLSQL test configuration file
+;; Since this file is read by Lisp, it is okay to use
+;; comments in this file
+;; This file should be named .clsql-test.config and
+;; placed in your home directory
+ 
+((:mysql ("localhost" "a-mysql-db" "user1" "secret"))
+ (:aodbc ("my-dsn" "a-user" "pass"))
+ (:postgresql ("localhost" "another-db" "user2" "dont-tell"))
+ (:postgresql-socket ("pg-server" "a-db-name" "user" "secret-password"))
+ (:sqlite ("path-to-sqlite-db")))
+
Binary files clsql-3.7.4\libmySQL.dll and clsql\libmySQL.dll differ
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\libsqlite3 (1).def clsql\libsqlite3 (1).def
--- clsql-3.7.4\libsqlite3 (1).def	Wed Dec 31 16:00:00 1969
+++ clsql\libsqlite3 (1).def	Sat Aug 12 10:54:22 2006
@@ -0,0 +1,101 @@
+EXPORTS
+sqlite3_aggregate_context
+sqlite3_aggregate_count
+sqlite3_bind_blob
+sqlite3_bind_double
+sqlite3_bind_int
+sqlite3_bind_int64
+sqlite3_bind_null
+sqlite3_bind_parameter_count
+sqlite3_bind_parameter_index
+sqlite3_bind_parameter_name
+sqlite3_bind_text
+sqlite3_bind_text16
+sqlite3_busy_handler
+sqlite3_busy_timeout
+sqlite3_changes
+sqlite3_close
+sqlite3_collation_needed
+sqlite3_collation_needed16
+sqlite3_column_blob
+sqlite3_column_bytes
+sqlite3_column_bytes16
+sqlite3_column_count
+sqlite3_column_decltype
+sqlite3_column_decltype16
+sqlite3_column_double
+sqlite3_column_int
+sqlite3_column_int64
+sqlite3_column_name
+sqlite3_column_name16
+sqlite3_column_text
+sqlite3_column_text16
+sqlite3_column_type
+sqlite3_commit_hook
+sqlite3_complete
+sqlite3_complete16
+sqlite3_create_collation
+sqlite3_create_collation16
+sqlite3_create_function
+sqlite3_create_function16
+sqlite3_data_count
+sqlite3_db_handle
+sqlite3_enable_shared_cache
+sqlite3_errcode
+sqlite3_errmsg
+sqlite3_errmsg16
+sqlite3_exec
+sqlite3_expired
+sqlite3_finalize
+sqlite3_free
+sqlite3_free_table
+sqlite3_get_autocommit
+sqlite3_get_auxdata
+sqlite3_get_table
+sqlite3_global_recover
+sqlite3_interrupt
+sqlite3_last_insert_rowid
+sqlite3_libversion
+sqlite3_libversion_number
+sqlite3_mprintf
+sqlite3_open
+sqlite3_open16
+sqlite3_prepare
+sqlite3_prepare16
+sqlite3_progress_handler
+sqlite3_reset
+sqlite3_result_blob
+sqlite3_result_double
+sqlite3_result_error
+sqlite3_result_error16
+sqlite3_result_int
+sqlite3_result_int64
+sqlite3_result_null
+sqlite3_result_text
+sqlite3_result_text16
+sqlite3_result_text16be
+sqlite3_result_text16le
+sqlite3_result_value
+sqlite3_rollback_hook
+sqlite3_set_authorizer
+sqlite3_set_auxdata
+sqlite3_snprintf
+sqlite3_step
+sqlite3_thread_cleanup
+sqlite3_total_changes
+sqlite3_trace
+sqlite3_transfer_bindings
+sqlite3_update_hook
+sqlite3_user_data
+sqlite3_value_blob
+sqlite3_value_bytes
+sqlite3_value_bytes16
+sqlite3_value_double
+sqlite3_value_int
+sqlite3_value_int64
+sqlite3_value_text
+sqlite3_value_text16
+sqlite3_value_text16be
+sqlite3_value_text16le
+sqlite3_value_type
+sqlite3_vmprintf
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\rt\rt.lisp clsql\rt\rt.lisp
--- clsql-3.7.4\rt\rt.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\rt\rt.lisp	Mon Sep 11 22:15:47 2006
@@ -0,0 +1,254 @@
+#|----------------------------------------------------------------------------|
+ | Copyright 1990 by the Massachusetts Institute of Technology, Cambridge MA. |
+ |                                                                            |
+ | Permission  to  use,  copy, modify, and distribute this software  and  its |
+ | documentation for any purpose  and without fee is hereby granted, provided |
+ | that this copyright  and  permission  notice  appear  in  all  copies  and |
+ | supporting  documentation,  and  that  the  name  of M.I.T. not be used in |
+ | advertising or  publicity  pertaining  to  distribution  of  the  software |
+ | without   specific,   written   prior   permission.      M.I.T.  makes  no |
+ | representations  about  the  suitability of this software for any purpose. |
+ | It is provided "as is" without express or implied warranty.                |
+ |                                                                            |
+ |  M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,  INCLUDING  |
+ |  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL  |
+ |  M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL  DAMAGES  OR  |
+ |  ANY  DAMAGES  WHATSOEVER  RESULTING  FROM  LOSS OF USE, DATA OR PROFITS,  |
+ |  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER  TORTIOUS  ACTION,  |
+ |  ARISING  OUT  OF  OR  IN  CONNECTION WITH THE USE OR PERFORMANCE OF THIS  |
+ |  SOFTWARE.                                                                 |
+ |----------------------------------------------------------------------------|#
+
+(defpackage #:regression-test
+  (:nicknames #:rtest #-lispworks #:rt) 
+  (:use #:cl)
+  (:export #:*do-tests-when-defined* #:*test* #:continue-testing
+	   #:deftest #:do-test #:do-tests #:get-test #:pending-tests
+	   #:rem-all-tests #:rem-test)
+  (:documentation "The MIT regression tester with pfdietz's modifications"))
+
+(in-package :regression-test)
+
+(defvar *test* nil "Current test name")
+(defvar *do-tests-when-defined* nil)
+(defvar *entries* '(nil) "Test database")
+(defvar *in-test* nil "Used by TEST")
+(defvar *debug* nil "For debugging")
+(defvar *catch-errors* t
+  "When true, causes errors in a test to be caught.")
+(defvar *print-circle-on-failure* nil
+  "Failure reports are printed with *PRINT-CIRCLE* bound to this value.")
+(defvar *compile-tests* nil
+  "When true, compile the tests before running them.")
+(defvar *optimization-settings* '((safety 3)))
+(defvar *expected-failures* nil
+  "A list of test names that are expected to fail.")
+
+(defstruct (entry (:conc-name nil)
+		  (:type list))
+  pend name form)
+
+(defmacro vals (entry) `(cdddr ,entry))
+
+(defmacro defn (entry) `(cdr ,entry))
+
+(defun pending-tests ()
+  (do ((l (cdr *entries*) (cdr l))
+       (r nil))
+      ((null l) (nreverse r))
+    (when (pend (car l))
+      (push (name (car l)) r))))
+
+(defun rem-all-tests ()
+  (setq *entries* (list nil))
+  nil)
+
+(defun rem-test (&optional (name *test*))
+  (do ((l *entries* (cdr l)))
+      ((null (cdr l)) nil)
+    (when (equal (name (cadr l)) name)
+      (setf (cdr l) (cddr l))
+      (return name))))
+
+(defun get-test (&optional (name *test*))
+  (defn (get-entry name)))
+
+(defun get-entry (name)
+  (let ((entry (find name (cdr *entries*)
+		     :key #'name
+		     :test #'equal)))
+    (when (null entry)
+      (report-error t
+        "~%No test with name ~:@(~S~)."
+	name))
+    entry))
+
+(defmacro deftest (name form &rest values)
+  `(add-entry '(t ,name ,form .,values)))
+
+(defun add-entry (entry)
+  (setq entry (copy-list entry))
+  (do ((l *entries* (cdr l))) (nil)
+    (when (null (cdr l))
+      (setf (cdr l) (list entry))
+      (return nil))
+    (when (equal (name (cadr l)) 
+		 (name entry))
+      (setf (cadr l) entry)
+      (report-error nil
+        "Redefining test ~:@(~S~)"
+        (name entry))
+      (return nil)))
+  (when *do-tests-when-defined*
+    (do-entry entry))
+  (setq *test* (name entry)))
+
+(defun report-error (error? &rest args)
+  (cond (*debug* 
+	 (apply #'format t args)
+	 (if error? (throw '*debug* nil)))
+	(error? (apply #'error args))
+	(t (apply #'warn args))))
+
+(defun do-test (&optional (name *test*))
+  (do-entry (get-entry name)))
+
+(defun equalp-with-case (x y)
+  "Like EQUALP, but doesn't do case conversion of characters."
+  (cond
+   ((eq x y) t)
+   ((consp x)
+    (and (consp y)
+	 (equalp-with-case (car x) (car y))
+	 (equalp-with-case (cdr x) (cdr y))))
+   ((and (typep x 'array)
+	 (= (array-rank x) 0))
+    (equalp-with-case (aref x) (aref y)))
+   ((typep x 'vector)
+    (and (typep y 'vector)
+	 (let ((x-len (length x))
+	       (y-len (length y)))
+	   (and (eql x-len y-len)
+		(loop
+		 for e1 across x
+		 for e2 across y
+		 always (equalp-with-case e1 e2))))))
+   ((and (typep x 'array)
+	 (typep y 'array)
+	 (not (equal (array-dimensions x)
+		     (array-dimensions y))))
+    nil)
+   ((typep x 'array)
+    (and (typep y 'array)
+	 (let ((size (array-total-size x)))
+	   (loop for i from 0 below size
+		 always (equalp-with-case (row-major-aref x i)
+					  (row-major-aref y i))))))
+   (t (eql x y))))
+
+(defun do-entry (entry &optional
+		       (s *standard-output*))
+  (catch '*in-test*
+    (setq *test* (name entry))
+    (setf (pend entry) t)
+    (let* ((*in-test* t)
+	   ;; (*break-on-warnings* t)
+	   (aborted nil)
+	   r)
+      ;; (declare (special *break-on-warnings*))
+
+      (block aborted
+	(setf r
+	      (flet ((%do
+		      ()
+		      (if *compile-tests*
+			  (multiple-value-list
+			   (funcall (compile
+				     nil
+				     `(lambda ()
+					(declare
+					 (optimize ,@*optimization-settings*))
+					,(form entry)))))
+			(multiple-value-list
+			 (eval (form entry))))))
+		(if *catch-errors*
+		    (handler-bind
+			((style-warning #'muffle-warning)
+			 (error #'(lambda (c)
+				    (setf aborted t)
+				    (setf r (list c))
+				    (return-from aborted nil))))
+		      (%do))
+		  (%do)))))
+
+      (setf (pend entry)
+	    (or aborted
+		(not (equalp-with-case r (vals entry)))))
+      
+      (when (pend entry)
+	(let ((*print-circle* *print-circle-on-failure*))
+	  (format s "~&Test ~:@(~S~) failed~
+                   ~%Form: ~S~
+                   ~%Expected value~P: ~
+                      ~{~S~^~%~17t~}~%"
+		  *test* (form entry)
+		  (length (vals entry))
+		  (vals entry))
+	  (format s "Actual value~P: ~
+                      ~{~S~^~%~15t~}.~%"
+		  (length r) r)))))
+  (when (not (pend entry)) *test*))
+
+(defun continue-testing ()
+  (if *in-test*
+      (throw '*in-test* nil)
+      (do-entries *standard-output*)))
+
+(defun do-tests (&optional
+		 (out *standard-output*))
+  (dolist (entry (cdr *entries*))
+    (setf (pend entry) t))
+  (if (streamp out)
+      (do-entries out)
+      (with-open-file 
+	  (stream out :direction :output)
+	(do-entries stream))))
+
+(defun do-entries (s)
+  (format s "~&Doing ~A pending test~:P ~
+             of ~A tests total.~%"
+          (count t (cdr *entries*)
+		 :key #'pend)
+	  (length (cdr *entries*)))
+  (dolist (entry (cdr *entries*))
+    (when (pend entry)
+      (format s "~@[~<~%~:; ~:@(~S~)~>~]"
+	      (do-entry entry s))))
+  (let ((pending (pending-tests))
+	(expected-table (make-hash-table :test #'equal)))
+    (dolist (ex *expected-failures*)
+      (setf (gethash ex expected-table) t))
+    (let ((new-failures
+	   (loop for pend in pending
+		 unless (gethash pend expected-table)
+		 collect pend)))
+      (if (null pending)
+	  (format s "~&No tests failed.")
+	(progn
+	  (format s "~&~A out of ~A ~
+                   total tests failed: ~
+                   ~:@(~{~<~%   ~1:;~S~>~
+                         ~^, ~}~)."
+		  (length pending)
+		  (length (cdr *entries*))
+		  pending)
+	  (if (null new-failures)
+	      (format s "~&No unexpected failures.")
+	    (when *expected-failures*
+	      (format s "~&~A unexpected failures: ~
+                   ~:@(~{~<~%   ~1:;~S~>~
+                         ~^, ~}~)."
+		    (length new-failures)
+		    new-failures)))
+	  ))
+      (null pending))))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\rt.asd clsql\rt.asd
--- clsql-3.7.4\rt.asd	Wed Dec 31 16:00:00 1969
+++ clsql\rt.asd	Fri Sep 22 18:16:42 2006
@@ -0,0 +1,30 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; File:     clsql-tests.asd
+;;;; Authors:  Marcus Pearce <m.t.pearce@city.ac.uk> and Kevin Rosenberg 
+;;;; Created:  30/03/2004
+;;;; Updated:  $Id: clsql-tests.asd 9519 2004-05-30 06:22:22Z kevin $
+;;;;
+;;;; This file is part of CLSQL.
+;;;;
+;;;; CLSQL users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+(in-package #:cl-user)
+(defpackage #:rt-sys (:use #:asdf #:cl))
+(in-package #:rt-sys)
+
+(defsystem rt
+    :name "MIT Regression Tests"
+    :author ""
+    :maintainer ""
+    :version ""
+    :licence "MIT License"
+    :description "A regression test suite for CLSQL."
+    :components 
+    ((:module rt
+	      :components ((:file "rt")))))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\base-classes.lisp clsql\sql\base-classes.lisp
--- clsql-3.7.4\sql\base-classes.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\sql\base-classes.lisp	Wed Oct 11 22:28:35 2006
@@ -40,7 +40,9 @@
    (attribute-cache :initform (make-hash-table :size 100 :test 'equal) 
 		    :accessor attribute-cache
 		    :documentation "Internal cache of table attributes. It is keyed by table-name. Values
-are a list of ACTION specified for table and any cached value of list-attributes-types."))
+are a list of ACTION specified for table and any cached value of list-attributes-types.")
+   (column-quote :initform nil :accessor column-quote :initarg :column-quote
+                 :documentation "Character wrapped around column names that contain whitespace"))
   (:documentation
    "This class is the supertype of all databases handled by CLSQL."))
 
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\corman\select.lisp clsql\sql\corman\select.lisp
--- clsql-3.7.4\sql\corman\select.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\sql\corman\select.lisp	Fri Sep 22 10:10:14 2006
@@ -0,0 +1,79 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;;
+;;;; $Id$
+;;;;
+;;;; select function for Corman port of CLSQL.
+;;;;
+;;;; This file is part of the Corman port of CLSQL by Jay Kint.
+;;;;
+;;;; CLSQL users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+
+(in-package #:clsql-sys)
+
+(defun select (&rest select-all-args)
+  "build an SQL select statement and run the query."
+    (unless (or *default-database* (getf select-all-args :database))
+      (signal-no-database-error nil))
+    
+    (let* ((expr (apply #'make-query select-all-args))
+           (specified-types
+            (mapcar #'(lambda (attrib)
+                        (if (typep attrib 'sql-ident-attribute)
+                            (let ((type (slot-value attrib 'type)))
+                              (if type
+                                  type
+                                t))
+                          t))
+                    (slot-value expr 'selections))))
+      (destructuring-bind (&key (flatp nil)
+                                (result-types :auto)
+                                (field-names t)
+                                (database *default-database*)
+                                &allow-other-keys)
+          select-all-args
+        (query expr :flatp flatp
+               :result-types
+               ;; specifying a type for an attribute overrides result-types
+               (if (some #'(lambda (x) (not (eq t x))) specified-types)
+                   specified-types
+                 result-types)
+               :field-names field-names
+               :database database))))
+
+
+;;     (let ((database (getf select-all-args :database *default-database*))
+;;           (flatp (getf select-all-args :flatp nil))
+;;           (result-types (getf select-all-args :result-types :auto))
+;;           (field-names (getf select-all-args :field-names t)))
+;;       (remf select-all-args :flatp)
+;;       (remf select-all-args :database)
+;;       (remf select-all-args :result-types)
+;;       (remf select-all-args :field-names)
+;;       (output-sql (apply #'make-query select-all-args) database)))
+;;              :database database :flatp flatp :result-types result-types :field-names field-names)))
+
+
+  ; scan for the :database attribute and set that, otherwise use the *default-database*
+;;   (let ((database *default-database*)
+;;         (database-keyword (last select-all-args 2)))
+;;     (if (and (symbolp (car database-keyword)) (eq (symbol-name (car database-keyword) 'database)))
+;;         (setf database (cadr database-keyword))
+;;       (let 
+;;     (query (output-sql (apply #'make-query select-all-args) database)))
+
+;;   (output-sql (apply #'make-query select-all-args)))
+;;   (let ((command "SELECT "))
+;;     (dolist (arg select-all-args)
+;;       (cond
+;;        ((eq (type-of arg) 'clsql-sys:sql-ident-attribute)
+;;         (setf command (concatenate 'string command (symbol-name (slot-value arg 'name)) " ")))
+;;        ((eq (type-of arg) 'string)
+;;         (setf command (concatenate 'string command arg " ")))
+;;        ((symbolp arg)
+;;         (setf command (concatenate 'string command (symbol-name arg) " ")))))
+;;     command))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\corman\types.lisp clsql\sql\corman\types.lisp
--- clsql-3.7.4\sql\corman\types.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\sql\corman\types.lisp	Tue Oct 10 10:31:59 2006
@@ -0,0 +1,134 @@
+(in-package #:clsql-sys)
+
+(defparameter *default-string-length* 255
+  "The length of a string which does not have a user-specified length.")
+
+(defmethod database-get-type-specifier (type args database db-type)
+  (declare (ignore type args database db-type))
+  (format nil "VARCHAR(~D)" *default-string-length*))
+
+(defmethod database-get-type-specifier ((type (eql 'integer)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "INT(~A)" (car args))
+    "INT"))
+
+(deftype tinyint ()
+  "An 8-bit integer, this width may vary by SQL implementation."
+  'integer)
+
+(defmethod database-get-type-specifier ((type (eql 'tinyint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INT")
+
+(deftype smallint ()
+  "An integer smaller than a 32-bit integer. this width may vary by SQL implementation."
+  'integer)
+
+(defmethod database-get-type-specifier ((type (eql 'smallint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INT")
+
+(deftype mediumint ()
+  "An integer smaller than a 32-bit integer, but may be larger than a smallint. This width may vary by SQL implementation."
+  'integer)
+
+(defmethod database-get-type-specifier ((type (eql 'mediumint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INT")
+
+(deftype bigint ()
+  "An integer larger than a 32-bit integer, this width may vary by SQL implementation."
+  'integer)
+
+(defmethod database-get-type-specifier ((type (eql 'bigint)) args database db-type)
+  (declare (ignore args database db-type))
+  "BIGINT")
+
+(deftype varchar (&optional size)
+  "A variable length string for the SQL varchar type."
+  (declare (ignore size))
+  'string)
+
+(defmethod database-get-type-specifier ((type (eql 'varchar)) args
+                                        database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "VARCHAR(~A)" (car args))
+      (format nil "VARCHAR(~D)" *default-string-length*)))
+
+(defmethod database-get-type-specifier ((type (eql 'string)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "CHAR(~A)" (car args))
+      (format nil "VARCHAR(~D)" *default-string-length*)))
+
+(deftype universal-time ()
+  "A positive integer as returned by GET-UNIVERSAL-TIME."
+  '(integer 1 *))
+
+(defmethod database-get-type-specifier ((type (eql 'universal-time)) args database db-type)
+  (declare (ignore args database db-type))
+  "BIGINT")
+
+(defmethod database-get-type-specifier ((type (eql 'wall-time)) args database db-type)
+  (declare (ignore args database db-type))
+  "TIMESTAMP")
+
+(defmethod database-get-type-specifier ((type (eql 'date)) args database db-type)
+  (declare (ignore args database db-type))
+  "DATE")
+
+(defmethod database-get-type-specifier ((type (eql 'duration)) args database db-type)
+  (declare (ignore database args db-type))
+  "VARCHAR")
+
+(defmethod database-get-type-specifier ((type (eql 'money)) args database db-type)
+  (declare (ignore database args db-type))
+  "INT8")
+
+#+ignore
+(deftype char (&optional len)
+  "A lisp type for the SQL CHAR type."
+  `(string ,len))
+
+(defmethod database-get-type-specifier ((type (eql 'float)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "FLOAT(~A)" (car args))
+      "FLOAT"))
+
+(defmethod database-get-type-specifier ((type (eql 'long-float)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "FLOAT(~A)" (car args))
+      "FLOAT"))
+
+(deftype generalized-boolean ()
+  "A type which outputs a SQL boolean value, though any lisp type can be stored in the slot."
+  t)
+
+(defmethod database-get-type-specifier ((type (eql 'boolean)) args database db-type)
+  (declare (ignore args database db-type))
+  "BOOL")
+
+(defmethod database-get-type-specifier ((type (eql 'generalized-boolean)) args database db-type)
+  (declare (ignore args database db-type))
+  "BOOL")
+
+(defmethod database-get-type-specifier ((type (eql 'number)) args database db-type)
+  (declare (ignore database db-type))
+  (cond
+   ((and (consp args) (= (length args) 2))
+    (format nil "NUMBER(~D,~D)" (first args) (second args)))
+   ((and (consp args) (= (length args) 1))
+    (format nil "NUMBER(~D)" (first args)))
+   (t
+    "NUMBER")))
+
+(defmethod database-get-type-specifier ((type (eql 'char)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "CHAR(~D)" (first args))
+      "CHAR(1)"))
+
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\expressions.lisp clsql\sql\expressions.lisp
--- clsql-3.7.4\sql\expressions.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\sql\expressions.lisp	Thu Oct 12 08:24:56 2006
@@ -85,8 +85,12 @@
     `(make-instance 'sql :string ',text)))
 
 (defmethod output-sql ((expr sql) database)
-  (declare (ignore database))
+  (let ((quote-char (slot-value database 'column-quote)))
+    (if quote-char
+        (write-char quote-char *sql-stream*))
   (write-string (slot-value expr 'text) *sql-stream*)
+    (if quote-char
+        (write-char quote-char *sql-stream*)))
   t)
 
 (defmethod print-object ((ident sql) stream)
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\metaclasses.jay.lisp clsql\sql\metaclasses.jay.lisp
--- clsql-3.7.4\sql\metaclasses.jay.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\sql\metaclasses.jay.lisp	Tue Sep 05 21:50:29 2006
@@ -0,0 +1,566 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;;
+;;;; $Id: metaclasses.lisp 11094 2006-09-05 03:31:01Z kevin $
+;;;;
+;;;; CLSQL metaclass for standard-db-objects created in the OODDL.
+;;;;
+;;;; This file is part of CLSQL.
+;;;;
+;;;; CLSQL users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+(in-package #:clsql-sys)
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  (when (>= (length (generic-function-lambda-list
+		     (ensure-generic-function
+		      'compute-effective-slot-definition)))
+	    3)
+    (pushnew :kmr-normal-cesd cl:*features*))
+
+  (when (>= (length (generic-function-lambda-list
+		     (ensure-generic-function
+		      'direct-slot-definition-class)))
+	    3)
+    (pushnew :kmr-normal-dsdc cl:*features*))
+
+  (when (>= (length (generic-function-lambda-list
+		     (ensure-generic-function
+		      'effective-slot-definition-class)))
+	    3)
+    (pushnew :kmr-normal-esdc cl:*features*)))
+
+
+;; ------------------------------------------------------------
+;; metaclass: view-class
+
+(defclass standard-db-class (standard-class)
+  ((view-table
+    :accessor view-table
+    :initarg :view-table)
+   (definition
+    :accessor object-definition
+    :initarg :definition
+    :initform nil)
+   (key-slots
+    :accessor key-slots
+    :initform nil)
+   (class-qualifier
+    :accessor view-class-qualifier
+    :initarg :qualifier
+    :initform nil))
+  (:documentation "Metaclass for all CLSQL View Classes."))
+
+;;; Lispworks 4.2 and before requires special processing of extra slot and class options
+
+(defvar +extra-slot-options+ '(:column :db-kind :db-type :db-reader :void-value :db-constraints
+			       :db-writer :db-info))
+(defvar +extra-class-options+ '(:base-table))
+
+#+lispworks
+(dolist (slot-option +extra-slot-options+)
+  (eval `(process-slot-option standard-db-class ,slot-option)))
+
+#+lispworks
+(dolist (class-option +extra-class-options+)
+  (eval `(process-class-option standard-db-class ,class-option)))
+
+(defmethod validate-superclass ((class standard-db-class)
+				(superclass standard-class))
+  t)
+
+(defun table-name-from-arg (arg)
+  (cond ((symbolp arg)
+	 arg)
+	((typep arg 'sql-ident)
+	 (slot-value arg 'name))
+	((stringp arg)
+	 (intern arg))))
+
+(defun column-name-from-arg (arg)
+  (cond ((symbolp arg)
+	 arg)
+	((typep arg 'sql-ident)
+	 (slot-value arg 'name))
+	((stringp arg)
+	 (intern (symbol-name-default-case arg)))))
+
+
+(defun remove-keyword-arg (arglist akey)
+  (let ((mylist arglist)
+	(newlist ()))
+    (labels ((pop-arg (alist)
+	     (let ((arg (pop alist))
+		   (val (pop alist)))
+	       (unless (equal arg akey)
+		 (setf newlist (append (list arg val) newlist)))
+	       (when alist (pop-arg alist)))))
+      (pop-arg mylist))
+    newlist))
+
+(defmethod initialize-instance :around ((class standard-db-class)
+                                        &rest all-keys
+					&key direct-superclasses base-table
+                                        qualifier
+					&allow-other-keys)
+  (let ((root-class (find-class 'standard-db-object nil))
+	(vmc 'standard-db-class))
+    (setf (view-class-qualifier class)
+          (car qualifier))
+    (if root-class
+	(if (some #'(lambda (super) (typep super vmc))
+                  direct-superclasses)
+	    (call-next-method)
+            (apply #'call-next-method
+                   class
+		   :direct-superclasses (append (list root-class)
+                                                direct-superclasses)
+		   (remove-keyword-arg all-keys :direct-superclasses)))
+	(call-next-method))
+    (setf (view-table class)
+          (table-name-from-arg (sql-escape (or (and base-table
+                                                    (if (listp base-table)
+                                                        (car base-table)
+                                                        base-table))
+                                               (class-name class)))))
+    (register-metaclass class (nth (1+ (position :direct-slots all-keys))
+                                   all-keys))))
+
+(defmethod reinitialize-instance :around ((class standard-db-class)
+                                          &rest all-keys
+                                          &key base-table
+                                          direct-superclasses qualifier
+                                          &allow-other-keys)
+  (let ((root-class (find-class 'standard-db-object nil))
+	(vmc 'standard-db-class))
+    (setf (view-table class)
+          (table-name-from-arg (sql-escape (or (and base-table
+                                                    (if (listp base-table)
+                                                        (car base-table)
+                                                        base-table))
+                                               (class-name class)))))
+    (setf (view-class-qualifier class)
+          (car qualifier))
+    (if (and root-class (not (equal class root-class)))
+	(if (some #'(lambda (super) (typep super vmc))
+                  direct-superclasses)
+	    (call-next-method)
+            (apply #'call-next-method
+                   class
+                   :direct-superclasses (append (list root-class)
+                                                direct-superclasses)
+		   (remove-keyword-arg all-keys :direct-superclasses)))
+        (call-next-method)))
+  (register-metaclass class (nth (1+ (position :direct-slots all-keys))
+                                 all-keys)))
+
+
+(defun get-keywords (keys list)
+  (flet ((extract (key)
+           (let ((pos (position key list)))
+             (when pos
+               (nth (1+ pos) list)))))
+    (mapcar #'extract keys)))
+
+(defun describe-db-layout (class)
+  (flet ((not-db-col (col)
+           (not (member (nth 2 col) '(nil :base :key))))
+         (frob-slot (slot)
+           (let ((type (slot-definition-type slot)))
+             (if (eq type t)
+                 (setq type nil))
+             (list (slot-value slot 'name)
+                   type
+                   (slot-value slot 'db-kind)
+                   (and (slot-boundp slot 'column)
+                        (slot-value slot 'column))))))
+    (let ((all-slots (mapcar #'frob-slot (ordered-class-slots class))))
+      (setq all-slots (remove-if #'not-db-col all-slots))
+      (setq all-slots (stable-sort all-slots #'string< :key #'car))
+      ;;(mapcar #'dink-type all-slots)
+      all-slots)))
+
+(defun register-metaclass (class slots)
+  (labels ((not-db-col (col)
+             (not (member (nth 2 col)  '(nil :base :key))))
+           (frob-slot (slot)
+             (get-keywords '(:name :type :db-kind :column) slot)))
+    (let ((all-slots (mapcar #'frob-slot slots)))
+      (setq all-slots (remove-if #'not-db-col all-slots))
+      (setq all-slots (stable-sort all-slots #'string< :key #'car))
+      (setf (object-definition class) all-slots))
+    #-allegro
+    (setf (key-slots class) (remove-if-not (lambda (slot)
+					     (eql (slot-value slot 'db-kind)
+						  :key))
+					   (ordered-class-slots class)))))
+
+#+allegro
+(defmethod finalize-inheritance :after ((class standard-db-class))
+  (setf (key-slots class) (remove-if-not (lambda (slot)
+					   (eql (slot-value slot 'db-kind)
+						:key))
+					 (ordered-class-slots class))))
+
+;; return the deepest view-class ancestor for a given view class
+
+(defun base-db-class (classname)
+  (let* ((class (find-class classname))
+         (db-class (find-class 'standard-db-object)))
+    (loop
+     (let ((cds (class-direct-superclasses class)))
+       (cond ((null cds)
+              (error "not a db class"))
+             ((member db-class cds)
+              (return (class-name class))))
+       (setq class (car cds))))))
+
+(defun db-ancestors (classname)
+  (let ((class (find-class classname))
+        (db-class (find-class 'standard-db-object)))
+    (labels ((ancestors (class)
+             (let ((scs (class-direct-superclasses class)))
+               (if (member db-class scs)
+                   (list class)
+                   (append (list class) (mapcar #'ancestors scs))))))
+      (ancestors class))))
+
+(defclass view-class-slot-definition-mixin ()
+  ((column
+    :accessor view-class-slot-column
+    :initarg :column
+    :documentation
+    "The name of the SQL column this slot is stored in.  Defaults to
+the slot name.")
+   (db-kind
+    :accessor view-class-slot-db-kind
+    :initarg :db-kind
+    :initform :base
+    ;; openmcl 0.14.2 stores the value as list in the DSD
+    ;; :type (or list keyword)
+    #-openmcl :type #-openmcl keyword
+    :documentation
+    "The kind of DB mapping which is performed for this slot.  :base
+indicates the slot maps to an ordinary column of the DB view.  :key
+indicates that this slot corresponds to part of the unique keys for
+this view, :join indicates ... and :virtual indicates that this slot
+is an ordinary CLOS slot.  Defaults to :base.")
+   (db-reader
+    :accessor view-class-slot-db-reader
+    :initarg :db-reader
+    :initform nil
+    :documentation
+    "If a string, then when reading values from the DB, the string
+will be used for a format string, with the only value being the value
+from the database.  The resulting string will be used as the slot
+value.  If a function then it will take one argument, the value from
+the database, and return the value that should be put into the slot.")
+   (db-writer
+    :accessor view-class-slot-db-writer
+    :initarg :db-writer
+    :initform nil
+    :documentation
+    "If a string, then when reading values from the slot for the DB,
+the string will be used for a format string, with the only value being
+the value of the slot.  The resulting string will be used as the
+column value in the DB.  If a function then it will take one argument,
+the value of the slot, and return the value that should be put into
+the database.")
+   (db-type
+    :accessor view-class-slot-db-type
+    :initarg :db-type
+    :initform nil
+    :documentation
+    "A string which will be used as the type specifier for this slots
+column definition in the database.")
+   (db-constraints
+    :accessor view-class-slot-db-constraints
+    :initarg :db-constraints
+    :initform nil
+    :documentation
+    "A keyword symbol representing a single SQL column constraint or list of such symbols.")
+   (void-value
+    :accessor view-class-slot-void-value
+    :initarg :void-value
+    :initform nil
+    :documentation
+    "Value to store if the SQL value is NULL. Default is NIL.")
+   (db-info
+    :accessor view-class-slot-db-info
+    :initarg :db-info
+    :documentation "Description of the join.")
+   (specified-type
+    :accessor specified-type
+    :initarg specified-type
+    :initform nil
+    :documentation "Internal slot storing the :type specified by user.")))
+
+(defparameter *db-info-lambda-list*
+  '(&key join-class
+	 home-key
+	 foreign-key
+         (key-join nil)
+         (target-slot nil)
+	 (retrieval :immmediate)
+	 (set nil)))
+
+(defun parse-db-info (db-info-list)
+  (destructuring-bind
+	(&key join-class home-key key-join foreign-key (delete-rule nil)
+	      (target-slot nil) (retrieval :deferred) (set t))
+      db-info-list
+    (let ((ih (make-hash-table :size 6)))
+      (if join-class
+	  (setf (gethash :join-class ih) join-class)
+	  (error "Must specify :join-class in :db-info"))
+      (if home-key
+	  (setf (gethash :home-key ih) home-key)
+	  (error "Must specify :home-key in :db-info"))
+      (when delete-rule
+	(setf (gethash :delete-rule ih) delete-rule))
+      (if foreign-key
+	  (setf (gethash :foreign-key ih) foreign-key)
+	  (error "Must specify :foreign-key in :db-info"))
+      (when key-join
+        (setf (gethash :key-join ih) t))
+      (when target-slot
+	(setf (gethash :target-slot ih) target-slot))
+      (when set
+	(setf (gethash :set ih) set))
+      (when retrieval
+	(progn
+	  (setf (gethash :retrieval ih) retrieval)
+	  (if (eql retrieval :immediate)
+	      (setf (gethash :set ih) nil))))
+      ih)))
+
+(defclass view-class-direct-slot-definition (view-class-slot-definition-mixin
+					     standard-direct-slot-definition)
+  ())
+
+(defclass view-class-effective-slot-definition (view-class-slot-definition-mixin
+						standard-effective-slot-definition)
+  ())
+
+(defmethod direct-slot-definition-class ((class standard-db-class)
+                                         #+kmr-normal-dsdc &rest
+                                         initargs)
+  (declare (ignore initargs))
+  (find-class 'view-class-direct-slot-definition))
+
+(defmethod effective-slot-definition-class ((class standard-db-class)
+					    #+kmr-normal-esdc &rest
+					    initargs)
+  (declare (ignore initargs))
+  (find-class 'view-class-effective-slot-definition))
+
+#+openmcl
+(when (not (symbol-function 'compute-class-precedence-list))
+  (eval
+   (defun compute-class-precedence-list (class)
+     (class-precedence-list class))))
+
+#-mop-slot-order-reversed
+(defmethod compute-slots ((class standard-db-class))
+  "Need to sort order of class slots so they are the same across
+implementations."
+  (let ((slots (call-next-method))
+	desired-sequence
+	output-slots)
+    (dolist (c (compute-class-precedence-list class))
+      (dolist (s (class-direct-slots c))
+	(let ((name (slot-definition-name s)))
+	  (unless (find name desired-sequence)
+	    (push name desired-sequence)))))
+    (dolist (desired desired-sequence)
+      (let ((slot (find desired slots :key #'slot-definition-name)))
+	(assert slot)
+	(push slot output-slots)))
+    output-slots))
+
+(defun compute-lisp-type-from-specified-type (specified-type db-constraints)
+  "Computes the Lisp type for a user-specified type."
+  (let ((type
+         (cond
+           ((consp specified-type)
+            (let* ((first (first specified-type))
+                   (name (etypecase first
+                           (symbol (symbol-name first))
+                           (string first))))
+            (cond
+               ((or (string-equal name "string")
+                    (string-equal name "varchar")
+                    (string-equal name "char"))
+               'string)
+              (t
+                specified-type))))
+           ((eq (ensure-keyword specified-type) :bigint)
+            'integer)
+           ((eq (ensure-keyword specified-type) :char)
+            'character)
+           ((eq (ensure-keyword specified-type) :varchar)
+            'string)
+           (t
+            specified-type))))
+    (if (and type (not (member :not-null (listify db-constraints))))
+        `(or null ,type)
+        type)))
+
+;; Compute the slot definition for slots in a view-class.  Figures out
+;; what kind of database value (if any) is stored there, generates and
+;; verifies the column name.
+
+(declaim (inline delistify))
+(defun delistify (list)
+  "Some MOPs, like openmcl 0.14.2, cons attribute values in a list."
+  (if (listp list)
+      (car list)
+      list))
+
+(declaim (inline delistify-dsd))
+(defun delistify-dsd (list)
+  "Some MOPs, like openmcl 0.14.2, cons attribute values in a list."
+  (if (and (listp list) (null (cdr list)))
+      (car list)
+      list))
+
+(defmethod initialize-instance :around ((obj view-class-direct-slot-definition)
+                                        &rest initargs)
+  (do* ((saved-initargs initargs)
+        (parsed (list obj))
+        (name (first initargs) (first initargs))
+        (val (second initargs) (second initargs))
+        (type nil)
+        (db-constraints nil))
+      ((null initargs)
+       (setq parsed
+             (append parsed
+                     (list 'specified-type type
+                           :type (compute-lisp-type-from-specified-type
+                                  type db-constraints))))
+       (apply #'call-next-method parsed))
+    (case name
+      (:db-constraints
+       (setq db-constraints val)
+       (setq parsed (append parsed (list name val))))
+      (:type
+       (setq type val))
+      (t
+       (setq parsed (append parsed (list name val)))))
+    (setq initargs (cddr initargs))))
+
+(defmethod compute-effective-slot-definition ((class standard-db-class)
+					      #+kmr-normal-cesd slot-name
+					      direct-slots)
+  #+kmr-normal-cesd (declare (ignore slot-name))
+
+  ;; KMR: store the user-specified type and then compute
+  ;; real Lisp type and store it
+  (let ((dsd (car direct-slots)))
+    (let ((esd (call-next-method)))
+      (typecase dsd
+	(view-class-slot-definition-mixin
+	 ;; Use the specified :column argument if it is supplied, otherwise
+	 ;; the column slot is filled in with the slot-name,  but transformed
+	 ;; to be sql safe, - to _ and such.
+	 (setf (slot-value esd 'column)
+	   (column-name-from-arg
+	    (if (slot-boundp dsd 'column)
+		(delistify-dsd (view-class-slot-column dsd))
+	      (column-name-from-arg
+	       (sql-escape (slot-definition-name dsd))))))
+
+	 (setf (slot-value esd 'db-type)
+	   (when (slot-boundp dsd 'db-type)
+	     (delistify-dsd
+	      (view-class-slot-db-type dsd))))
+
+	 (setf (slot-value esd 'void-value)
+	       (delistify-dsd
+		(view-class-slot-void-value dsd)))
+
+	 ;; :db-kind slot value defaults to :base (store slot value in
+	 ;; database)
+
+	 (setf (slot-value esd 'db-kind)
+	   (if (slot-boundp dsd 'db-kind)
+	       (delistify-dsd (view-class-slot-db-kind dsd))
+	     :base))
+
+	 (setf (slot-value esd 'db-reader)
+	   (when (slot-boundp dsd 'db-reader)
+	     (delistify-dsd (view-class-slot-db-reader dsd))))
+	 (setf (slot-value esd 'db-writer)
+	   (when (slot-boundp dsd 'db-writer)
+	     (delistify-dsd (view-class-slot-db-writer dsd))))
+	 (setf (slot-value esd 'db-constraints)
+	   (when (slot-boundp dsd 'db-constraints)
+	     (delistify-dsd (view-class-slot-db-constraints dsd))))
+
+	 ;; I wonder if this slot option and the previous could be merged,
+	 ;; so that :base and :key remain keyword options, but :db-kind
+	 ;; :join becomes :db-kind (:join <db info .... >)?
+
+	 (setf (slot-value esd 'db-info)
+	       (when (slot-boundp dsd 'db-info)
+		 (let ((dsd-info (view-class-slot-db-info dsd)))
+		   (cond
+		     ((atom dsd-info)
+		      dsd-info)
+		     ((and (listp dsd-info) (> (length dsd-info) 1)
+			   (atom (car dsd-info)))
+		      (parse-db-info dsd-info))
+		     ((and (listp dsd-info) (= 1 (length dsd-info))
+			   (listp (car dsd-info)))
+		      (parse-db-info (car dsd-info)))))))
+
+	 (setf (specified-type esd)
+	       (delistify-dsd (specified-type dsd)))
+
+	 )
+	;; all other slots
+	(t
+         (unless (typep esd 'view-class-effective-slot-definition)
+           (warn "Non view-class-direct-slot object with non-view-class-effective-slot-definition in compute-effective-slot-definition")
+
+	 (let ((type-predicate #+openmcl (slot-value esd 'ccl::type-predicate)))
+	   #-openmcl (declare (ignore type-predicate))
+	   #-(or clisp sbcl)  (change-class esd 'view-class-effective-slot-definition
+				 #+allegro :name
+				 #+allegro (slot-definition-name dsd))
+	   #+openmcl (setf (slot-value esd 'ccl::type-predicate)
+                             type-predicate)))
+
+	 (setf (slot-value esd 'column)
+	   (column-name-from-arg
+	    (sql-escape (slot-definition-name dsd))))
+
+	 (setf (slot-value esd 'db-info) nil)
+	 (setf (slot-value esd 'db-kind) :virtual)
+	 (setf (specified-type esd) (slot-definition-type dsd)))
+	)
+      esd)))
+
+(defun slotdefs-for-slots-with-class (slots class)
+  (let ((result nil))
+    (dolist (s slots)
+      (let ((c (slotdef-for-slot-with-class s class)))
+	(if c (setf result (cons c result)))))
+    result))
+
+(defun slotdef-for-slot-with-class (slot class)
+  (find-if #'(lambda (d) (eql slot (slot-definition-name d)))
+	   (class-slots class)))
+
+#+ignore
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  #+kmr-normal-cesd
+  (setq cl:*features* (delete :kmr-normal-cesd cl:*features*))
+  #+kmr-normal-dsdc
+  (setq cl:*features* (delete :kmr-normal-dsdc cl:*features*))
+  #+kmr-normal-esdc
+  (setq cl:*features* (delete :kmr-normal-esdc cl:*features*))
+  )
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\README clsql\sql\README
--- clsql-3.7.4\sql\README	Wed Dec 31 16:00:00 1969
+++ clsql\sql\README	Wed Mar 16 03:49:41 2005
@@ -0,0 +1,151 @@
+This directory contains several hash-map implementations, similar in
+API to SGI's hash_map class, but with different performance
+characteristics.  sparse_hash_map uses very little space overhead, 1-2
+bits per entry.  dense_hash_map is very fast, particulary on lookup.
+(sparse_hash_set and dense_hash_set are the set versions of these
+routines.)  On the other hand, these classes have requirements that
+may not make them appropriate for all applications.
+
+All these implementation use a hashtable with internal quadratic
+probing.  This method is space-efficient -- there is no pointer
+overhead -- and time-efficient for good hash functions.
+
+COMPILING
+---------
+To compile test applications with these classes, run ./configure
+followed by make.  To install these header files on your system, run
+'make install'.  See INSTALL for more details.
+
+USING
+-----
+See the html files in the doc directory for small example programs
+that use these classes.  It's enough to just include the header file:
+
+   #include <google/sparse_hash_map> // or sparse_hash_set, dense_hash_map, ...
+   std::sparse_hash_set<int, int> number_mapper;
+
+and use the class the way you would other hash-map implementations.
+(Though see "API" below for caveats.)
+
+By default (you can change it via a flag to ./configure), these hash
+implementations are defined in the std namespace.
+
+API
+---
+The API for sparse_hash_map, dense_hash_map, sparse_hash_set, and
+dense_hash_set, are a superset of the API of SGI's hash_map class.
+See doc/sparse_hash_map.html, et al., for more information about the
+API.
+
+The usage of these classes differ from SGI's hash_map, and other
+hashtable implementations, in the following major ways:
+
+1) dense_hash_map requires you to set aside one key value as the
+   'empty bucket' value, set via the set_empty_key() method.  This
+   *MUST* be called before you can use the dense_hash_map.  It is
+   illegal to insert any elements into a dense_hash_map whose key is
+   equal to the empty-key.
+
+2) For both dense_hash_map and sparse_hash_map, if you wish to delete
+   elements from the hashtable, you must set aside a key value as the
+   'deleted bucket' value, set via the set_deleted_key() method.  If
+   your hash-map is insert-only, there is no need to call this
+   method.  If you call set_deleted_key(), it is illegal to insert any
+   elements into a dense_hash_map or sparse_hash_map whose key is
+   equal to the deleted-key.
+
+3) Both dense_hash_map and sparse_hash_map must take "plain old
+   data" for the key and value.  For keys this is usually true: basic
+   C types and C++ types like string are both acceptable, for
+   instance.  For values, this is often true.  If it is not, consider
+   storing a pointer to the value in the hash-map, rather than the
+   value itself.  This also yields speed improvements, since the
+   hashtable will have less memory to move around when it resizes.
+
+4) These hash-map implementation support I/O.  See below.
+
+There are also some smaller differences:
+
+1) The constructor takes an optional argument that specifies the
+   number of elements you expect to insert into the hashtable.  This
+   differs from SGI's hash_map implementation, which takes an optional
+   number of buckets.
+
+2) erase() does not immediately reclaim memory.  As a consequence,
+   erase() does not invalidate any iterators, making loops like this
+   correct:
+      for (it = ht.begin(); it != ht.end(); ++it)
+        if (...) ht.erase(it);
+   As another consequence, a series of erase() calls can leave your
+   hashtable using more memory than it needs to.  The hashtable will
+   automatically compact() at the next call to insert(), but to
+   manually compact a hashtable, you can call
+      ht.resize(0)
+
+3) While sparse_hash_map et al. accept an Allocator template argument,
+   they ignore it.  They use malloc() and free() for all memory
+   allocations.
+
+4) sparse_hash_map et al. do not use exceptions.
+
+I/O
+---
+In addition to the normal hash-map operations, sparse_hash_map can
+read and write hashtables to disk.  (dense_hash_map also has the API,
+but it has not yet been implemented, and writes will always fail.)
+
+In the simplest case, writing a hashtable is as easy as calling two
+methods on the hashtable:
+   ht.write_metadata(fp);
+   ht.write_nopointer_data(fp);
+
+Reading in this data is equally simple:
+   sparse_hash_map<...> ht;
+   ht.read_metadata(fp);
+   ht.read_nopointer_data(fp);
+
+The above is sufficient if the key and value do not contain any
+pointers: they are basic C types or agglomorations of basic C types.
+If the key and/or value do contain pointers, you can still store the
+hashtable by replacing write_nopointer_data() with a custom writing
+routine.  See sparse_hash_map.html et al. for more information.
+
+SPARSETABLE
+-----------
+In addition to the hash-map and hash-set classes, this package also
+provides sparsetable.h, an array implementation that uses space
+proportional to the number of elements in the array, rather than the
+maximum element index.  It uses very little space overhead: 1 bit per
+entry.  See sparsetable.html for the API.
+
+RESOURCE USAGE
+--------------
+* sparse_hash_map has memory overhead of about 2 bits per hash-map
+  entry.
+* dense_hash_map has a factor of 2-3 memory overhead: if your
+  hashtable data takes X bytes, dense_hash_map will use 3X-4X memory
+  total.
+
+Hashtables tend to double in size when resizing, creating an
+additional 50% space overhead.  dense_hash_map does in fact have a
+significant "high water mark" memory use requirement.
+sparse_hash_map, however, is written to need very little space
+overhead when resizing: only a few bits per hashtable entry.
+
+PERFORMANCE
+-----------
+You can compile and run the included file time_hash_map.cc to examine
+the performance of sparse_hash_map, dense_hash_map, and your native
+hash_map implementation on your system.  One test against the
+SGI hash_map implementation gave the following timing information for
+a simple find() call:
+   SGI hash_map:     22 ns
+   dense_hash_map:   13 ns
+   sparse_hash_map: 117 ns
+   SGI map:         113 ns
+
+See doc/performance.html for more detailed charts on resource usage
+and performance data.
+
+---
+16 March 2005
Binary files clsql-3.7.4\sql\test and clsql\sql\test differ
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\test.lisp clsql\sql\test.lisp
--- clsql-3.7.4\sql\test.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\sql\test.lisp	Sat Aug 26 11:08:47 2006
@@ -0,0 +1,155 @@
+(defclass test-db ()
+  ((attribute-cache :initform (make-hash-table))))
+
+(defparameter database (make-instance 'test-db))
+
+(with-slots (attribute-cache) database
+      (setf (gethash 'color attribute-cache) 'blue)
+      (setf (gethash 'name attribute-cache) "Jay"))
+
+(with-slots (attribute-cache) database
+            (cond
+             ((eq table :default)
+              (maphash (lambda (k v)
+                         (when (eq (first v) :unspecified)
+                           (cond
+                            ((eq action :flush)
+                             (setf (gethash k attribute-cache) (list t nil)))
+                            ((null action)
+                             (setf (gethash k attribute-cache) (list nil nil)))
+                            ((eq t action)
+                             (setf (gethash k attribute-cache) (list t (second v)))))))
+                       attribute-cache))))
+
+(defun stupid (table &key (action nil) (db database))
+  (with-slots (attribute-cache) db
+              (maphash (lambda (k v)
+                         (print k)
+                         (print v)
+                         (setf (gethash k attribute-cache) 1)) ;)))
+                         attribute-cache))
+  (values))
+
+(defun stupid2 (table &key (action nil) (db database))
+  (with-slots (attribute-cache) db
+              (cond
+               ((eq table :default)
+                         attribute-cache)))
+  (values))
+
+(with-slots (attribute-cache) database
+              (maphash (lambda (k v)
+                         (print k) (print v)
+                         (setf (gethash k attribute-cache) v))
+                       attribute-cache))
+
+(macroexpand-all '(with-slots (attribute-cache) database
+                              (maphash (lambda (k v)
+                                         (print k) (print v)
+                                         (setf (gethash k attribute-cache) v))
+                                       attribute-cache)))
+
+(macroexpand-diag '(with-slots (attribute-cache) database
+                              (maphash (lambda (k v)
+                                         (print k) (print v)
+                                         (setf (gethash k attribute-cache) v))
+                                       attribute-cache)))
+
+(with-slots (attribute-cache) database
+            (setf (gethash 'color attribute-cache) 'red))
+
+(LET ((#:G7230 DB)) 
+     (SYMBOL-MACROLET ((ATTRIBUTE-CACHE (SLOT-VALUE #:G7230 'ATTRIBUTE-CACHE)))
+                      (MAPHASH 
+                       (LAMBDA (K V) 
+                               (SETF (GETHASH K ATTRIBUTE-CACHE) (LIST T (SECOND V)))) ATTRIBUTE-CACHE)))
+
+(macroexpand-all '(with-slots (attribute-cache) db
+                          attribute-cache))
+
+(with-slots (attribute-cache) database attribute-cache)
+
+(macroexpand-all '(symbol-macrolet ((attribute-cache (slot-value database 'attribute-cache)))
+                   (maphash (lambda (k v)
+                              (setf (gethash k attribute-cache) v))
+                            attribute-cache)))
+
+; test from synchromesh.  I don't know if it's exactly the same, but it sure
+; looks similar.
+(defun l ()
+  (format t "I'm in L~%"))
+
+(defun hook (expander form env)
+  (format t "Now expanding: ~S~%" form)
+  (funcall expander form env))
+
+(defclass c () ((l :initform (list 'red 'green 'blue))
+                (f :initform nil)))
+
+(defparameter i (make-instance 'c))
+
+(setf (slot-value i 'f) #'l)
+
+
+; this one works
+(with-slots (l) i
+            ((lambda (x) (cons x l)) l))
+
+(let ((*macroexpand-hook* #'hook))
+  (macroexpand-all '(with-slots (l) i
+            ((lambda (x) (cons x l)) l))))
+
+(let ((*macroexpand-hook* #'hook))
+  (macroexpand-all '(with-slots (l) i
+                                (function (lambda (x) (cons x l))) l)))
+
+; this one doesn't.
+(with-slots (l) i
+            (funcall (function (lambda (x) (cons x l))) l))
+
+(let ((*macroexpand-hook* #'hook))
+  (macroexpand-all '(with-slots (l) i
+                             (funcall #'(lambda (x) (cons x l))) l)))
+
+(macroexpand-all '(with-slots (l) i #'l l))
+
+(with-slots (l f) i (funcall #'l) l)
+
+(with-slots (l) i
+            (funcall (lambda (x) (cons x l))) l)
+
+(macroexpand-all '(with-slots (l) i
+                             (funcall (lambda (x) (cons x l))) l))
+
+(defmacro machook (x y) `(/ (+ ,x ,y) 2))
+(macroexpand '(machook 1 2))
+(let ((*macroexpand-hook* #'hook)) (macroexpand '(machook 1 2)))
+
+(macroexpand '(machook 1 2))
+
+; very simple test tha seems to show the problem
+(defparameter y '(a b))
+
+(define-symbol-macro x (car y))
+
+((lambda (z) (print z) z) x)
+
+(funcall (function (lambda (z) (print z) z)) x)
+
+(symbol-macrolet ((x (cdr y)))
+  ((lambda (z) (print z) x) x))
+
+(macroexpand-all '(symbol-macrolet ((x (cdr y)))
+  ((lambda (z) (print z) x) x)))
+
+(symbol-macrolet ((x (cdr y)))
+  (funcall (function (lambda (z) (print z) x)) x))
+
+(symbol-macrolet ((x (cdr y)))
+  (funcall (function (lambda (z) (print z) x)) x))
+
+(symbol-macrolet ((x (cdr y)))
+  (funcall (function (lambda (z) (print z) (funcall (function (lambda (a) (print a) x)) x) x)) x))
+
+(macroexpand-all '(symbol-macrolet ((x (cdr y)))
+                    (funcall (function (lambda (z) (print z) x)) x)))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\time.lisp clsql\sql\time.lisp
--- clsql-3.7.4\sql\time.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\sql\time.lisp	Thu Sep 21 09:24:54 2006
@@ -56,7 +56,7 @@
 ;; ------------------------------------------------------------
 ;; time classes: wall-time, duration
 
-(eval-when (:compile-toplevel :load-toplevel)
+(eval-when (:compile-toplevel :load-toplevel #+:cormanlisp :execute)
 
 (defstruct (wall-time (:conc-name time-)
                       (:constructor %make-wall-time)
@@ -388,7 +388,7 @@
             :greater-than))))
 
 ; now the same for dates
-(eval-when (:compile-toplevel :load-toplevel)
+(eval-when (:compile-toplevel :load-toplevel #+:cormanlisp :execute )
 (defun replace-string (string1 search-string replace-string &key (test #'string=))
   "Search within string1 for search-string, replace with replace-string, non-destructively."
   (let ((replace-string-length (length replace-string))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\time.~lisp clsql\sql\time.~lisp
--- clsql-3.7.4\sql\time.~lisp	Wed Dec 31 16:00:00 1969
+++ clsql\sql\time.~lisp	Thu Aug 03 09:00:50 2006
@@ -0,0 +1,1357 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;;
+;;;; $Id: time.lisp 10922 2006-05-03 14:39:10Z kevin $
+;;;;
+;;;; A variety of structures and function for creating and
+;;;; manipulating dates, times, durations and intervals for
+;;;; CLSQL.
+;;;;
+;;;; This file was originally part of ODCL and is Copyright (c) 2002 -
+;;;; 2003 onShore Development, Inc.
+;;;;
+;;;; CLSQL users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+(in-package #:clsql-sys)
+
+;; ------------------------------------------------------------
+;; Months
+
+(defvar *month-keywords*
+  '(:january :february :march :april :may :june :july :august :september
+    :october :november :december))
+
+(defvar *month-names*
+  '("" "January" "February" "March" "April" "May" "June" "July" "August"
+    "September" "October" "November" "December"))
+
+(defun month-name (month-index)
+  (nth month-index *month-names*))
+
+(defun ordinal-month (month-keyword)
+  "Return the zero-based month number for the given MONTH keyword."
+  (position month-keyword *month-keywords*))
+
+
+;; ------------------------------------------------------------
+;; Days
+
+(defvar *day-keywords*
+  '(:sunday :monday :tuesday :wednesday :thursday :friday :saturday))
+
+(defvar *day-names*
+  '("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"))
+
+(defun day-name (day-index)
+  (nth day-index *day-names*))
+
+(defun ordinal-day (day-keyword)
+  "Return the zero-based day number for the given DAY keyword."
+  (position day-keyword *day-keywords*))
+
+
+;; ------------------------------------------------------------
+;; time classes: wall-time, duration
+
+; (eval-when (:compile-toplevel :load-toplevel)
+
+(defstruct (wall-time (:conc-name time-)
+                      (:constructor %make-wall-time)
+                      (:print-function %print-wall-time))
+  (mjd 0 :type fixnum)
+  (second 0 :type fixnum)
+  (usec 0 :type fixnum))
+
+(defun %print-wall-time (time stream depth)
+  (declare (ignore depth))
+  (if *print-escape*
+      (format stream "#<WALL-TIME: ~a>" (format-time nil time))
+      (format-time stream time :format :pretty)))
+
+(defstruct (duration (:constructor %make-duration)
+                     (:print-function %print-duration))
+  (year 0 :type fixnum)
+  (month 0 :type fixnum)
+  (day 0 :type fixnum)
+  (hour 0 :type fixnum)
+  (second 0 :type fixnum)
+  (minute 0 :type fixnum)
+  (usec 0 :type fixnum))
+
+(defun %print-duration (duration stream depth)
+  (declare (ignore depth))
+  (if *print-escape*
+      (format stream "#<DURATION: ~a>"
+	      (format-duration nil duration :precision :second))
+      (format-duration stream duration :precision :second)))
+
+(defstruct (date (:constructor %make-date)
+		 (:print-function %print-date))
+  (mjd 0 :type fixnum))
+
+(defun %print-date (date stream depth)
+  (declare (ignore depth))
+  (if *print-escape*
+      (format stream "#<DATE: ~a>" (format-date nil date))
+      (format-date stream date :format :pretty)))
+
+; );eval-when
+
+(defun duration-timestring (duration)
+  (let ((second (duration-second duration))
+        (minute (duration-minute duration))
+        (hour (duration-hour duration))
+        (day (duration-day duration))
+	(month (duration-month duration))
+	(year (duration-year duration)))
+    (format nil "P~dY~dM~dD~dH~dM~dS" year month day hour minute second)))
+
+
+;; ------------------------------------------------------------
+;; Constructors
+
+(defun make-time (&key (year 0) (month 1) (day 1) (hour 0) (minute 0)
+                       (second 0) (usec 0) (offset 0))
+  (let ((mjd (gregorian-to-mjd month day year))
+        (sec (+ (* hour 60 60)
+                (* minute 60)
+                second (- offset))))
+    (multiple-value-bind (day-add raw-sec)
+        (floor sec (* 60 60 24))
+      (%make-wall-time :mjd (+ mjd day-add) :second raw-sec :usec usec))))
+
+(defun make-date (&key (year 0) (month 1) (day 1) (hour 0) (minute 0)
+                       (second 0) (usec 0) (offset 0))
+  (time->date (make-time :year year :month month :day day :hour hour
+			 :minute minute :second second :usec usec :offset offset)))
+
+(defun copy-time (time)
+  (%make-wall-time :mjd (time-mjd time)
+                   :second (time-second time)))
+
+(defun utime->time (utime)
+  "Return a pair: (GREGORIAN DAY . TIME-OF-DAY)"
+  (multiple-value-bind (second minute hour day mon year)
+      (decode-universal-time utime)
+    (make-time :year year :month mon :day day :hour hour :minute minute
+               :second second)))
+
+(defun date->time (date)
+  "Returns a walltime for the given date"
+  (%make-wall-time :mjd (date-mjd date)))
+
+(defun time->date (time)
+  "Returns a date for the given wall time (obvious loss in resolution)"
+  (%make-date :mjd (time-mjd time)))
+
+(defun get-time ()
+  "Return a pair: (GREGORIAN DAY . TIME-OF-DAY)"
+  (utime->time (get-universal-time)))
+
+(defun get-date ()
+  "Returns a date for today"
+  (time->date (get-time)))
+
+(defun make-duration (&key (year 0) (month 0) (day 0) (hour 0) (minute 0)
+                      (second 0) (usec 0))
+  (multiple-value-bind (second-add usec-1000000)
+      (floor usec 1000000)
+    (multiple-value-bind (minute-add second-60)
+        (floor (+ second second-add) 60)
+      (multiple-value-bind (hour-add minute-60)
+          (floor (+ minute minute-add) 60)
+        (multiple-value-bind (day-add hour-24)
+            (floor (+ hour hour-add) 24)
+          (%make-duration :year year :month month :day (+ day day-add)
+                          :hour hour-24
+                          :minute minute-60
+                          :second second-60
+                          :usec usec-1000000))))))
+
+
+;; ------------------------------------------------------------
+;; Accessors
+
+(defun time-hms (time)
+  (multiple-value-bind (hourminute second)
+      (floor (time-second time) 60)
+    (multiple-value-bind (hour minute)
+        (floor hourminute 60)
+      (values hour minute second))))
+
+(defun time-ymd (time)
+  (destructuring-bind (month day year)
+      (mjd-to-gregorian (time-mjd time))
+    (values year month day)))
+
+(defun time-dow (time)
+  "Return the 0 indexed Day of the week starting with Sunday"
+  (mod (+ 3 (time-mjd time)) 7))
+
+(defun decode-time (time)
+  "returns the decoded time as multiple values: usec, second, minute, hour,
+  day, month, year, integer day-of-week"
+  (multiple-value-bind (year month day)
+      (time-ymd time)
+    (multiple-value-bind (hour minute second)
+        (time-hms time)
+      (values (time-usec time) second minute hour day month year (mod (+ (time-mjd time) 3) 7)))))
+
+(defun date-ymd (date)
+  (time-ymd (date->time date)))
+
+(defun date-dow (date)
+  (time-dow (date->time date)))
+
+(defun decode-date (date)
+  "returns the decoded date as multiple values: day month year integer day-of-week"
+  (multiple-value-bind (year month day)
+      (time-ymd (date->time date))
+    (values day month year (date-dow date))))
+
+;; duration specific
+(defun duration-reduce (duration precision &optional round)
+  (ecase precision
+    (:usec
+     (+ (duration-usec duration)
+        (* (duration-reduce duration :second) 1000000)))
+    (:second
+     (+ (if round
+            (floor (duration-usec duration) 500000)
+            0)
+        (duration-second duration)
+        (* (duration-reduce duration :minute) 60)))
+    (:minute
+     (+ (if round
+            (floor (duration-second duration) 30)
+            0)
+        (duration-minute duration)
+        (* (duration-reduce duration :hour) 60)))
+    (:hour
+     (+ (if round
+	    (floor (duration-minute duration) 30)
+	    0)
+	(duration-hour duration)
+	(* (duration-reduce duration :day) 24)))
+    (:day
+     (+ (if round
+	    (floor (duration-hour duration) 12)
+	    0)
+	(duration-day duration)))))
+
+
+;; ------------------------------------------------------------
+;; Arithemetic and comparators
+
+(defun duration= (duration-a duration-b)
+  (= (duration-reduce duration-a :usec)
+     (duration-reduce duration-b :usec)))
+
+(defun duration< (duration-a duration-b)
+  (< (duration-reduce duration-a :usec)
+     (duration-reduce duration-b :usec)))
+
+(defun duration<= (duration-a duration-b)
+  (<= (duration-reduce duration-a :usec)
+      (duration-reduce duration-b :usec)))
+
+(defun duration>= (x y)
+  (duration<= y x))
+
+(defun duration> (x y)
+  (duration< y x))
+
+(defun %time< (x y)
+  (let ((mjd-x (time-mjd x))
+        (mjd-y (time-mjd y)))
+    (if (/= mjd-x mjd-y)
+        (< mjd-x mjd-y)
+        (if (/= (time-second x) (time-second y))
+            (< (time-second x) (time-second y))
+            (< (time-usec x) (time-usec y))))))
+
+(defun %time>= (x y)
+  (if (/= (time-mjd x) (time-mjd y))
+      (>= (time-mjd x) (time-mjd y))
+      (if (/= (time-second x) (time-second y))
+          (>= (time-second x) (time-second y))
+          (>= (time-usec x) (time-usec y)))))
+
+(defun %time<= (x y)
+  (if (/= (time-mjd x) (time-mjd y))
+      (<= (time-mjd x) (time-mjd y))
+      (if (/= (time-second x) (time-second y))
+          (<= (time-second x) (time-second y))
+          (<= (time-usec x) (time-usec y)))))
+
+(defun %time> (x y)
+  (if (/= (time-mjd x) (time-mjd y))
+      (> (time-mjd x) (time-mjd y))
+      (if (/= (time-second x) (time-second y))
+          (> (time-second x) (time-second y))
+          (> (time-usec x) (time-usec y)))))
+
+(defun %time= (x y)
+  (and (= (time-mjd x) (time-mjd y))
+       (= (time-second x) (time-second y))
+       (= (time-usec x) (time-usec y))))
+
+(defun time= (number &rest more-numbers)
+  "Returns T if all of its arguments are numerically equal, NIL otherwise."
+  (do ((nlist more-numbers (cdr nlist)))
+      ((atom nlist) t)
+     (declare (list nlist))
+     (if (not (%time= (car nlist) number)) (return nil))))
+
+(defun time/= (number &rest more-numbers)
+  "Returns T if no two of its arguments are numerically equal, NIL otherwise."
+  (do* ((head number (car nlist))
+	(nlist more-numbers (cdr nlist)))
+       ((atom nlist) t)
+     (declare (list nlist))
+     (unless (do* ((nl nlist (cdr nl)))
+		  ((atom nl) t)
+	       (declare (list nl))
+	       (if (%time= head (car nl)) (return nil)))
+       (return nil))))
+
+(defun time< (number &rest more-numbers)
+  "Returns T if its arguments are in strictly increasing order, NIL otherwise."
+  (do* ((n number (car nlist))
+	(nlist more-numbers (cdr nlist)))
+       ((atom nlist) t)
+     (declare (list nlist))
+     (if (not (%time< n (car nlist))) (return nil))))
+
+(defun time> (number &rest more-numbers)
+  "Returns T if its arguments are in strictly decreasing order, NIL otherwise."
+  (do* ((n number (car nlist))
+	(nlist more-numbers (cdr nlist)))
+       ((atom nlist) t)
+     (declare (list nlist))
+     (if (not (%time> n (car nlist))) (return nil))))
+
+(defun time<= (number &rest more-numbers)
+  "Returns T if arguments are in strictly non-decreasing order, NIL otherwise."
+  (do* ((n number (car nlist))
+	(nlist more-numbers (cdr nlist)))
+       ((atom nlist) t)
+     (declare (list nlist))
+     (if (not (%time<= n (car nlist))) (return nil))))
+
+(defun time>= (number &rest more-numbers)
+  "Returns T if arguments are in strictly non-increasing order, NIL otherwise."
+  (do* ((n number (car nlist))
+	(nlist more-numbers (cdr nlist)))
+       ((atom nlist) t)
+     (declare (list nlist))
+     (if (not (%time>= n (car nlist))) (return nil))))
+
+(defun time-max (number &rest more-numbers)
+  "Returns the greatest of its arguments."
+  (do ((nlist more-numbers (cdr nlist))
+       (result number))
+      ((null nlist) (return result))
+     (declare (list nlist))
+     (if (%time> (car nlist) result) (setf result (car nlist)))))
+
+(defun time-min (number &rest more-numbers)
+  "Returns the least of its arguments."
+  (do ((nlist more-numbers (cdr nlist))
+       (result number))
+      ((null nlist) (return result))
+     (declare (list nlist))
+     (if (%time< (car nlist) result) (setf result (car nlist)))))
+
+(defun time-compare (time-a time-b)
+  (let ((mjd-a (time-mjd time-a))
+        (mjd-b (time-mjd time-b))
+        (sec-a (time-second time-a))
+        (sec-b (time-second time-b))
+        (usec-a (time-usec time-a))
+        (usec-b (time-usec time-b)))
+    (if (= mjd-a mjd-b)
+        (if (= sec-a sec-b)
+            (if (= usec-a usec-b)
+                :equal
+                (if (< usec-a usec-b)
+                    :less-than
+                    :greater-than))
+            (if (< sec-a sec-b)
+                :less-than
+                :greater-than))
+        (if (< mjd-a mjd-b)
+            :less-than
+            :greater-than))))
+
+; now the same for dates
+;(eval-when (:compile-toplevel :load-toplevel)
+(defun replace-string (string1 search-string replace-string &key (test #'string=))
+  "Search within string1 for search-string, replace with replace-string, non-destructively."
+  (let ((replace-string-length (length replace-string))
+	(search-string-length  (length search-string)))
+    (labels ((sub-replace-string (current-string position)
+	       (let ((found-position (search search-string current-string :test test :start2 position)))
+		 (if (null found-position)
+		     current-string
+		     (sub-replace-string (concatenate 'string
+						      (subseq current-string 0 found-position)
+						      replace-string
+						      (subseq current-string (+ found-position search-string-length)))
+					 (+ position replace-string-length))))))
+      (sub-replace-string string1 0))))
+;);eval-when
+
+(defmacro wrap-time-for-date (time-func &key (result-func))
+  (let ((date-func (intern (replace-string (symbol-name time-func) "TIME" "DATE"))))
+    `(defun ,date-func (number &rest more-numbers)
+      (let ((result (apply #',time-func (mapcar #'date->time (cons number more-numbers)))))
+	,(if result-func
+	     `(funcall #',result-func result)
+	     'result)))))
+
+(wrap-time-for-date time=)
+(wrap-time-for-date time/=)
+(wrap-time-for-date time<)
+(wrap-time-for-date time>)
+(wrap-time-for-date time<=)
+(wrap-time-for-date time>=)
+(wrap-time-for-date time-max :result-func time->date)
+(wrap-time-for-date time-min :result-func time->date)
+
+(defun date-compare (date-a date-b)
+  (time-compare (date->time date-a) (date->time date-b)))
+
+;; ------------------------------------------------------------
+;; Formatting and output
+
+(defvar +decimal-printer+ #(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9))
+
+(defun db-timestring (time)
+  "return the string to store the given time in the database"
+  (declare (optimize (speed 3)))
+  (let ((output (copy-seq "'XXXX-XX-XX XX:XX:XX.")))
+    (flet ((inscribe-base-10 (output offset size decimal)
+             (declare (type fixnum offset size decimal)
+                      (type (simple-vector 10) +decimal-printer+))
+             (dotimes (x size)
+               (declare (type fixnum x)
+                        (optimize (safety 0)))
+               (multiple-value-bind (next this)
+                   (floor decimal 10)
+                 (setf (aref output (+ (- size x 1) offset))
+                       (aref +decimal-printer+ this))
+                 (setf decimal next)))))
+      (multiple-value-bind (usec second minute hour day month year)
+          (decode-time time)
+        (inscribe-base-10 output 1 4 year)
+        (inscribe-base-10 output 6 2 month)
+        (inscribe-base-10 output 9 2 day)
+        (inscribe-base-10 output 12 2 hour)
+        (inscribe-base-10 output 15 2 minute)
+        (inscribe-base-10 output 18 2 second)
+        (format nil "~a~d'" output usec)))))
+
+(defun iso-timestring (time)
+  "return the string to store the given time in the database"
+  (declare (optimize (speed 3)))
+  (let ((output (copy-seq "XXXX-XX-XX XX:XX:XX,")))
+    (flet ((inscribe-base-10 (output offset size decimal)
+             (declare (type fixnum offset size decimal)
+                      (type (simple-vector 10) +decimal-printer+))
+             (dotimes (x size)
+               (declare (type fixnum x)
+                        (optimize (safety 0)))
+               (multiple-value-bind (next this)
+                   (floor decimal 10)
+                 (setf (aref output (+ (- size x 1) offset))
+                       (aref +decimal-printer+ this))
+                 (setf decimal next)))))
+      (multiple-value-bind (usec second minute hour day month year)
+          (decode-time time)
+        (inscribe-base-10 output 0 4 year)
+        (inscribe-base-10 output 5 2 month)
+        (inscribe-base-10 output 8 2 day)
+        (inscribe-base-10 output 11 2 hour)
+        (inscribe-base-10 output 14 2 minute)
+        (inscribe-base-10 output 17 2 second)
+        (format nil "~a,~d" output usec)))))
+
+(defun db-datestring (date)
+  (db-timestring (date->time date)))
+(defun iso-datestring (date)
+  (iso-timestring (date->time date)))
+
+
+;; ------------------------------------------------------------
+;; Intervals
+
+(defstruct interval
+  (start nil)
+  (end nil)
+  (name nil)
+  (contained nil)
+  (type nil)
+  (data nil))
+
+;; fix : should also return :contains / :contained
+
+(defun interval-relation (x y)
+  "Compare the relationship of node x to node y. Returns either
+:contained :contains :follows :overlaps or :precedes."
+  (let ((xst  (interval-start x))
+        (xend (interval-end x))
+        (yst  (interval-start y))
+        (yend (interval-end y)))
+    (case (time-compare xst yst)
+      (:equal
+       (case (time-compare xend yend)
+         (:less-than
+          :contained)
+         ((:equal :greater-than)
+          :contains)))
+      (:greater-than
+       (case (time-compare xst yend)
+         ((:equal :greater-than)
+          :follows)
+         (:less-than
+          (case (time-compare xend yend)
+            ((:less-than :equal)
+             :contained)
+            ((:greater-than)
+             :overlaps)))))
+      (:less-than
+       (case (time-compare xend yst)
+         ((:equal :less-than)
+          :precedes)
+         (:greater-than
+          (case (time-compare xend yend)
+            (:less-than
+             :overlaps)
+            ((:equal :greater-than)
+             :contains))))))))
+
+;; ------------------------------------------------------------
+;; interval lists
+
+(defun sort-interval-list (list)
+  (sort list (lambda (x y)
+	       (case (interval-relation x y)
+		 ((:precedes :contains) t)
+		 ((:follows :overlaps :contained) nil)))))
+
+;; interval push will return its list of intervals in strict order.
+(defun interval-push (interval-list interval &optional container-rule)
+  (declare (ignore container-rule))
+  (let ((sorted-list (sort-interval-list interval-list)))
+    (dotimes (x (length sorted-list))
+      (let ((elt (nth x sorted-list)))
+	(case (interval-relation elt interval)
+	  (:follows
+	   (return-from interval-push (insert-at-index x sorted-list interval)))
+	  (:contains
+	   (return-from interval-push
+	     (replace-at-index x sorted-list
+			       (make-interval :start (interval-start elt)
+					      :end (interval-end elt)
+					      :type (interval-type elt)
+					      :contained (interval-push (interval-contained elt) interval)
+					      :data (interval-data elt)))))
+	  ((:overlaps :contained)
+	   (error "Overlap")))))
+    (append sorted-list (list interval))))
+
+;; interval lists
+
+(defun interval-match (list time)
+  "Return the index of the first interval in list containing time"
+  ;; this depends on ordering of intervals!
+  (let ((list (sort-interval-list list)))
+    (dotimes (x (length list))
+      (let ((elt (nth x list)))
+	(when (and (time<= (interval-start elt) time)
+		   (time< time (interval-end elt)))
+	  (return-from interval-match x))))))
+
+(defun interval-clear (list time)
+  (dotimes (x (length list))
+    (let ((elt (nth x list)))
+      (when (and (time<= (interval-start elt) time)
+                 (time< time (interval-end elt)))
+        (if (interval-match (interval-contained elt) time)
+            (return-from interval-clear
+              (replace-at-index x list
+				(make-interval :start (interval-start elt)
+                                               :end (interval-end elt)
+                                               :type (interval-type elt)
+                                               :contained (interval-clear (interval-contained elt) time)
+                                               :data (interval-data elt))))
+            (return-from interval-clear
+              (delete-at-index x list)))))))
+
+(defun interval-edit (list time start end &optional tag)
+  "Attempts to modify the most deeply nested interval in list which
+begins at time.  If no changes are made, returns nil."
+  ;; function required sorted interval list
+  (let ((list (sort-interval-list list)))
+    (if (null list) nil
+      (dotimes (x (length list))
+	(let ((elt (nth x list)))
+	  (when (and (time<= (interval-start elt) time)
+		     (time< time (interval-end elt)))
+	    (or (interval-edit (interval-contained elt) time start end tag)
+		(cond ((and (< 0 x)
+			    (time< start (interval-end (nth (1- x) list))))
+		       (error "Overlap of previous interval"))
+		      ((and (< x (1- (length list)))
+			    (time< (interval-start (nth (1+ x) list)) end))
+		       (error "~S ~S ~S ~S Overlap of next interval" x (length list) (interval-start (nth (1+ x) list)) end ))
+		      ((time= (interval-start elt) time)
+		       (return-from interval-edit
+			 (replace-at-index x list
+					   (make-interval :start start
+							  :end end
+							  :type (interval-type elt)
+							  :contained (restrict-intervals (interval-contained elt) start end)
+							  :data (or tag (interval-data elt))))))))))))))
+
+(defun restrict-intervals (list start end &aux newlist)
+  (let ((test-interval (make-interval :start start :end end)))
+    (dolist (elt list)
+      (when (equal :contained
+                   (interval-relation elt test-interval))
+        (push elt newlist)))
+    (nreverse newlist)))
+
+;;; utils from odcl/list.lisp
+
+(defun replace-at-index (idx list elt)
+  (cond ((= idx 0)
+         (cons elt (cdr list)))
+        ((= idx (1- (length list)))
+         (append (butlast list) (list elt)))
+        (t
+         (append (subseq list 0 idx)
+                 (list elt)
+                 (subseq list (1+ idx))))))
+
+(defun insert-at-index (idx list elt)
+  (cond ((= idx 0)
+         (cons elt list))
+        ((= idx (1- (length list)))
+         (append list (list elt)))
+        (t
+         (append (subseq list 0 idx)
+                 (list elt)
+                 (subseq list idx)))))
+
+(defun delete-at-index (idx list)
+  (cond ((= idx 0)
+         (cdr list))
+        ((= idx (1- (length list)))
+         (butlast list))
+        (t
+         (append (subseq list 0 idx)
+                 (subseq list (1+ idx))))))
+
+
+;; ------------------------------------------------------------
+;; return MJD for Gregorian date
+
+(defun gregorian-to-mjd (month day year)
+  (let ((b 0)
+        (month-adj month)
+        (year-adj (if (< year 0)
+                      (+ year 1)
+                      year))
+        d
+        c)
+    (when (< month 3)
+      (incf month-adj 12)
+      (decf year-adj))
+    (unless (or (< year 1582)
+                (and (= year 1582)
+                     (or (< month 10)
+                         (and (= month 10)
+                              (< day 15)))))
+      (let ((a (floor (/ year-adj 100))))
+        (setf b (+ (- 2 a) (floor (/ a 4))))))
+    (if (< year-adj 0)
+        (setf c (floor (- (* 365.25d0 year-adj) 679006.75d0)))
+        (setf c (floor (- (* 365.25d0 year-adj) 679006d0))))
+    (setf d (floor (* 30.6001 (+ 1 month-adj))))
+    ;; (cmsg "b ~s c ~s d ~s day ~s" b c d day)
+    (+ b c d day)))
+
+;; convert MJD to Gregorian date
+
+(defun mjd-to-gregorian (mjd)
+  (let (z r g a b c year month day)
+    (setf z (floor (+ mjd 678882)))
+    (setf r (- (+ mjd 678882) z))
+    (setf g (- z .25))
+    (setf a (floor (/ g 36524.25)))
+    (setf b (- a (floor (/ a 4))))
+    (setf year (floor (/ (+ b g) 365.25)))
+    (setf c (- (+ b z) (floor (* 365.25 year))))
+    (setf month (truncate (/ (+ (* 5 c) 456) 153)))
+    (setf day (+ (- c (truncate (/ (- (* 153 month) 457) 5))) r))
+    (when (> month 12)
+      (incf year)
+      (decf month 12))
+    (list month day year)))
+
+(defun duration+ (time &rest durations)
+  "Add each DURATION to TIME, returning a new wall-time value."
+  (let ((year   (duration-year time))
+        (month  (duration-month time))
+        (day    (duration-day time))
+        (hour   (duration-hour time))
+        (minute (duration-minute time))
+        (second (duration-second time))
+        (usec   (duration-usec time)))
+    (dolist (duration durations)
+      (incf year    (duration-year duration))
+      (incf month   (duration-month duration))
+      (incf day     (duration-day duration))
+      (incf hour    (duration-hour duration))
+      (incf minute  (duration-minute duration))
+      (incf second  (duration-second duration))
+      (incf usec    (duration-usec duration)))
+    (make-duration :year year :month month :day day :hour hour :minute minute
+                   :second second :usec usec)))
+
+(defun duration- (duration &rest durations)
+    "Subtract each DURATION from TIME, returning a new duration value."
+  (let ((year   (duration-year duration))
+        (month  (duration-month duration))
+        (day    (duration-day duration))
+        (hour   (duration-hour duration))
+        (minute (duration-minute duration))
+        (second (duration-second duration))
+        (usec   (duration-usec duration)))
+    (dolist (duration durations)
+      (decf year    (duration-year duration))
+      (decf month   (duration-month duration))
+      (decf day     (duration-day duration))
+      (decf hour    (duration-hour duration))
+      (decf minute  (duration-minute duration))
+      (decf second  (duration-second duration))
+      (decf usec    (duration-usec duration)))
+    (make-duration :year year :month month :day day :hour hour :minute minute
+                   :second second :usec usec)))
+
+;; Date + Duration
+
+(defun time+ (time &rest durations)
+  "Add each DURATION to TIME, returning a new wall-time value."
+  (let ((new-time (copy-time time)))
+    (dolist (duration durations)
+      (roll new-time
+            :year (duration-year duration)
+            :month (duration-month duration)
+            :day (duration-day duration)
+            :hour (duration-hour duration)
+            :minute (duration-minute duration)
+            :second (duration-second duration)
+            :usec (duration-usec duration)
+            :destructive t))
+    new-time))
+
+(defun date+ (date &rest durations)
+  "Add each DURATION to DATE, returning a new date value.
+Note that (barring daylight saving time) 12h + 12h will result in a new day, but doing
+it as separate calculations will not, as the time is chopped to a date before being returned."
+  (time->date (apply #'time+ (cons (date->time date) durations))))
+
+(defun time- (time &rest durations)
+  "Subtract each DURATION from TIME, returning a new wall-time value."
+  (let ((new-time (copy-time time)))
+    (dolist (duration durations)
+      (roll new-time
+            :year (- (duration-year duration))
+            :month (- (duration-month duration))
+            :day (- (duration-day duration))
+            :hour (- (duration-hour duration))
+            :minute (- (duration-minute duration))
+            :second (- (duration-second duration))
+            :usec (- (duration-usec duration))
+            :destructive t))
+    new-time))
+
+(defun date- (date &rest durations)
+  "Subtract each DURATION to DATE, returning a new date value.
+Note that (barring daylight saving time) 12h + 12h will result in a new day, but doing
+it as separate calculations will not, as the time is chopped to a date before being returned."
+  (time->date (apply #'time- (cons (date->time date) durations))))
+
+(defun time-difference (time1 time2)
+  "Returns a DURATION representing the difference between TIME1 and
+TIME2."
+  (flet ((do-diff (time1 time2)
+
+  (let (day-diff sec-diff)
+    (setf day-diff (- (time-mjd time2)
+		      (time-mjd time1)))
+    (if (> day-diff 0)
+	(progn (decf day-diff)
+	       (setf sec-diff (+ (time-second time2)
+				 (- (* 60 60 24)
+				    (time-second time1)))))
+      (setf sec-diff (- (time-second time2)
+			(time-second time1))))
+     (make-duration :day day-diff
+                   :second sec-diff))))
+    (if (time< time1 time2)
+	(do-diff time1 time2)
+      (do-diff time2 time1))))
+
+(defun date-difference (date1 date2)
+  "Returns a DURATION representing the difference between TIME1 and
+TIME2."
+  (time-difference (date->time date1) (date->time date2)))
+
+(defun format-date (stream date &key format
+		    (date-separator "-")
+		    (internal-separator " "))
+  "produces on stream the datestring corresponding to the date
+with the given options"
+  (format-time stream (date->time date)
+	       :format format
+	       :date-separator date-separator
+	       :internal-separator internal-separator))
+
+(defun format-time (stream time &key format
+                    (date-separator "-")
+                    (time-separator ":")
+                    (internal-separator " "))
+  "produces on stream the timestring corresponding to the wall-time
+with the given options"
+  (let ((*print-circle* nil))
+    (multiple-value-bind (usec second minute hour day month year dow)
+	(decode-time time)
+      (case format
+	(:pretty
+	 (format stream "~A ~A, ~A ~D, ~D"
+		 (pretty-time hour minute)
+		 (day-name dow)
+		 (month-name month)
+		 day
+		 year))
+	(:short-pretty
+	 (format stream "~A, ~D/~D/~D"
+		 (pretty-time hour minute)
+		 month day year))
+	(:iso
+	 (let ((string (iso-timestring time)))
+	   (if stream
+	       (write-string string stream)
+             string)))
+	(t
+	 (format stream "~2,'0D~A~2,'0D~A~2,'0D~A~2,'0D~A~2,'0D~A~2,'0D.~6,'0D"
+		 year date-separator month date-separator day
+		 internal-separator hour time-separator minute time-separator
+		 second usec))))))
+
+(defun pretty-time (hour minute)
+  (cond
+   ((eq hour 0)
+    (format nil "12:~2,'0D AM" minute))
+   ((eq hour 12)
+    (format nil "12:~2,'0D PM" minute))
+   ((< hour 12)
+    (format nil "~D:~2,'0D AM" hour minute))
+   ((and (> hour 12) (< hour 24))
+    (format nil "~D:~2,'0D PM" (- hour 12) minute))
+   (t
+    (error "pretty-time got bad hour"))))
+
+(defun leap-days-in-days (days)
+  ;; return the number of leap days between Mar 1 2000 and
+  ;; (Mar 1 2000) + days, where days can be negative
+  (if (< days 0)
+      (ceiling (/ (- days) (* 365 4)))
+      (floor (/ days (* 365 4)))))
+
+(defun current-year ()
+  (third (mjd-to-gregorian (time-mjd (get-time)))))
+
+(defun current-month ()
+  (first (mjd-to-gregorian (time-mjd (get-time)))))
+
+(defun current-day ()
+  (second (mjd-to-gregorian (time-mjd (get-time)))))
+
+(defun parse-date-time (string)
+  "parses date like 08/08/01, 8.8.2001, eg"
+  (when (> (length string) 1)
+    (let ((m (current-month))
+          (d (current-day))
+          (y (current-year)))
+      (let ((integers (mapcar #'parse-integer (hork-integers string))))
+        (case (length integers)
+          (1
+           (setf y (car integers)))
+          (2
+           (setf m (car integers))
+           (setf y (cadr integers)))
+          (3
+           (setf m (car integers))
+           (setf d (cadr integers))
+           (setf y (caddr integers)))
+          (t
+           (return-from parse-date-time))))
+      (when (< y 100)
+        (incf y 2000))
+      (make-time :year y :month m :day d))))
+
+(defun hork-integers (input)
+  (let ((output '())
+        (start 0))
+    (dotimes (x (length input))
+      (unless (<= 48 (char-code (aref input x)) 57)
+        (push (subseq input start x) output)
+        (setf start (1+ x))))
+    (nreverse (push (subseq input start) output))))
+
+(defun merged-time (day time-of-day)
+  (%make-wall-time :mjd (time-mjd day)
+                   :second (time-second time-of-day)))
+
+(defun time-meridian (hours)
+  (cond ((= hours 0)
+         (values 12 "AM"))
+        ((= hours 12)
+         (values 12 "PM"))
+        ((< 12 hours)
+         (values (- hours 12) "PM"))
+        (t
+         (values hours "AM"))))
+
+(defgeneric to-string (val &rest keys)
+  )
+
+(defmethod to-string ((time wall-time) &rest keys)
+  (destructuring-bind (&key (style :daytime) &allow-other-keys)
+      keys
+    (print-date time style)))
+
+(defun print-date (time &optional (style :daytime))
+  (multiple-value-bind (usec second minute hour day month year dow)
+      (decode-time time)
+    (declare (ignore usec second))
+    (multiple-value-bind (hours meridian)
+        (time-meridian hour)
+      (ecase style
+        (:time-of-day
+         ;; 2:00 PM
+         (format nil "~d:~2,'0d ~a" hours minute meridian))
+        (:long-day
+         ;; October 11th, 2000
+         (format nil "~a ~d, ~d" (month-name month) day year))
+        (:month
+         ;; October
+         (month-name month))
+        (:month-year
+         ;; October 2000
+         (format nil "~a ~d" (month-name month) year))
+        (:full
+         ;; 11:08 AM, November 22, 2002
+         (format nil "~d:~2,'0d ~a, ~a ~d, ~d"
+                 hours minute meridian (month-name month) day year))
+        (:full+weekday
+         ;; 11:09 AM Friday, November 22, 2002
+         (format nil "~d:~2,'0d ~a ~a, ~a ~d, ~d"
+                 hours minute meridian (nth dow *day-names*)
+                 (month-name month) day year))
+        (:daytime
+         ;; 11:09 AM, 11/22/2002
+         (format-time nil time :format :short-pretty))
+        (:day
+         ;; 11/22/2002
+         (format nil "~d/~d/~d" month day year))))))
+
+(defun time-element (time element)
+  (multiple-value-bind (usec second minute hour day month year dow)
+      (decode-time time)
+    (declare (ignore usec))
+    (ecase element
+      (:seconds
+       second)
+      (:minutes
+       minute)
+      (:hours
+       hour)
+      (:day-of-month
+       day)
+      (:integer-day-of-week
+       dow)
+      (:day-of-week
+       (nth dow *day-keywords*))
+      (:month
+       month)
+      (:year
+       year))))
+
+(defun date-element (date element)
+  (time-element (date->time date) element))
+
+(defun format-duration (stream duration &key (precision :minute))
+  (let ((second (duration-second duration))
+        (minute (duration-minute duration))
+        (hour (duration-hour duration))
+        (day (duration-day duration))
+	(month (duration-month duration))
+	(year (duration-year duration))
+        (return (null stream))
+        (stream (or stream (make-string-output-stream))))
+    (ecase precision
+      (:day
+       (setf hour 0 second 0 minute 0))
+      (:hour
+       (setf second 0 minute 0))
+      (:minute
+       (setf second 0))
+      (:second
+       t))
+    (if (= 0 year month day hour minute)
+        (format stream "0 minutes")
+        (let ((sent? nil))
+	  (when (< 0 year)
+	    (format stream "~d year~p" year year)
+	    (setf sent? t))
+	  (when (< 0 month)
+	    (when sent?
+	      (write-char #\Space stream))
+	    (format stream "~d month~p" month month)
+	    (setf sent? t))
+          (when (< 0 day)
+	    (when sent?
+	      (write-char #\Space stream))
+            (format stream "~d day~p" day day)
+            (setf sent? t))
+          (when (< 0 hour)
+            (when sent?
+              (write-char #\Space stream))
+            (format stream "~d hour~p" hour hour)
+            (setf sent? t))
+          (when (< 0 minute)
+            (when sent?
+              (write-char #\Space stream))
+            (format stream "~d min~p" minute minute)
+            (setf sent? t))
+          (when (< 0 second)
+            (when sent?
+              (write-char #\Space stream))
+            (format stream "~d sec~p" second second))))
+    (when return
+      (get-output-stream-string stream))))
+
+(defgeneric midnight (self))
+(defmethod midnight ((self wall-time))
+  "truncate hours, minutes and seconds"
+  (%make-wall-time :mjd (time-mjd self)))
+
+(defun roll (date &key (year 0) (month 0) (day 0) (second 0) (hour 0)
+             (minute 0) (usec 0) (destructive nil))
+  (unless (= 0 year month)
+    (multiple-value-bind (year-orig month-orig day-orig)
+        (time-ymd date)
+      (multiple-value-bind (new-year new-month)
+         (floor (+ month month-orig (* 12 (+ year year-orig))) 12)
+       (let ((new-date (make-time :year new-year
+                                  :month new-month
+                                  :day day-orig
+                                  :second (time-second date)
+                                  :usec usec)))
+         (if destructive
+             (setf (time-mjd date) (time-mjd new-date))
+             (setq date new-date))))))
+  (let ((mjd (time-mjd date))
+        (sec (time-second date))
+        (usec (time-usec date)))
+    (multiple-value-bind (sec-new usec-new)
+        (floor (+ usec
+                  (* 1000000
+                     (+ sec second
+                        (* 60 minute)
+                        (* 60 60 hour))))
+               1000000)
+      (multiple-value-bind (mjd-new sec-new)
+          (floor sec-new (* 60 60 24))
+        (if destructive
+            (progn
+              (setf (time-mjd date) (+ mjd mjd-new day)
+                    (time-second date) sec-new
+                    (time-usec date) usec-new)
+              date)
+            (%make-wall-time :mjd (+ mjd mjd-new day)
+                             :second sec-new
+                             :usec usec-new))))))
+
+(defun roll-to (date size position)
+  (ecase size
+    (:month
+     (ecase position
+       (:beginning
+        (roll date :day (+ 1
+                           (- (time-element date :day-of-month)))))
+       (:end
+        (roll date :day (+ (days-in-month (time-element date :month)
+                                          (time-element date :year))
+                           (- (time-element date :day-of-month)))))))))
+
+(defun week-containing (time)
+  (let* ((midn (midnight time))
+         (dow (time-element midn :integer-day-of-week)))
+    (list (roll midn :day (- dow))
+          (roll midn :day (- 7 dow)))))
+
+(defun leap-year? (year)
+  "t if YEAR is a leap yeap in the Gregorian calendar"
+  (and (= 0 (mod year 4))
+       (or (not (= 0 (mod year 100)))
+           (= 0 (mod year 400)))))
+
+(defun valid-month-p (month)
+  "t if MONTH exists in the Gregorian calendar"
+  (<= 1 month 12))
+
+(defun valid-gregorian-date-p (date)
+  "t if DATE (year month day) exists in the Gregorian calendar"
+  (let ((max-day (days-in-month (nth 1 date) (nth 0 date))))
+    (<= 1 (nth 2 date) max-day)))
+
+(defun days-in-month (month year &key (careful t))
+  "the number of days in MONTH of YEAR, observing Gregorian leap year
+rules"
+  (declare (type fixnum month year))
+  (when careful
+    (check-type month (satisfies valid-month-p)
+                "between 1 (January) and 12 (December)"))
+  (if (eql month 2)                     ; feb
+      (if (leap-year? year)
+          29 28)
+      (let ((even (mod (1- month) 2)))
+        (if (< month 8)                 ; aug
+            (- 31 even)
+            (+ 30 even)))))
+
+(defun day-of-year (year month day &key (careful t))
+  "the day number within the year of the date DATE.  For example,
+1987 1 1 returns 1"
+  (declare (type fixnum year month day))
+  (when careful
+    (let ((date (list year month day)))
+    (check-type date (satisfies valid-gregorian-date-p)
+                "a valid Gregorian date")))
+  (let ((doy (+ day (* 31 (1- month)))))
+    (declare (type fixnum doy))
+    (when (< 2 month)
+      (setf doy (- doy (floor (+ 23 (* 4 month)) 10)))
+      (when (leap-year? year)
+        (incf doy)))
+    doy))
+
+(defun parse-yearstring (string)
+  (let ((year (or (parse-integer-insensitively string)
+		  (extract-roman string))))
+    (when (and year (< 1500 year 2500))
+      (make-time :year year))))
+
+(defun parse-integer-insensitively (string)
+  (let ((start (position-if #'digit-char-p string))
+        (end   (position-if #'digit-char-p string :from-end t)))
+    (when (and start end)
+      (parse-integer (subseq string start (1+ end)) :junk-allowed t))))
+
+(defvar *roman-digits*
+  '((#\M . 1000)
+    (#\D . 500)
+    (#\C . 100)
+    (#\L . 50)
+    (#\X . 10)
+    (#\V . 5)
+    (#\I . 1)))
+
+(defun extract-roman (string &aux parse)
+  (dotimes (x (length string))
+    (let ((val (cdr (assoc (aref string x) *roman-digits*))))
+      (when (and val parse (< (car parse) val))
+        (push (- (pop parse)) parse))
+      (push val parse)))
+  (apply #'+ parse))
+
+
+;; ------------------------------------------------------------
+;; Parsing iso-8601 timestrings
+
+(define-condition iso-8601-syntax-error (sql-user-error)
+  ((bad-component;; year, month whatever
+    :initarg :bad-component
+    :reader bad-component))
+  (:report (lambda (c stream)
+	     (format stream "Bad component: ~A " (bad-component c)))))
+
+(defun parse-timestring (timestring &key (start 0) end junk-allowed)
+  "parse a timestring and return the corresponding wall-time.  If the
+timestring starts with P, read a duration; otherwise read an ISO 8601
+formatted date string."
+  (declare (ignore junk-allowed))
+  (let ((string (subseq timestring start end)))
+    (if (char= (aref string 0) #\P)
+	(parse-iso-8601-duration string)
+      (parse-iso-8601-time string))))
+
+(defun parse-datestring (datestring &key (start 0) end junk-allowed)
+  "parse a ISO 8601 timestring and return the corresponding date.
+Will throw a hissy fit if the date string is a duration. Will ignore any precision beyond day (hour/min/sec/usec)."
+  (let ((parsed-value (parse-timestring datestring :start start :end end :junk-allowed junk-allowed)))
+    (ecase (type-of parsed-value)
+      (wall-time (%make-date :mjd (time-mjd parsed-value))))))
+
+
+(defvar *iso-8601-duration-delimiters*
+  '((#\Y . :years)
+    (#\D . :days)
+    (#\H . :hours)
+    (#\M . :months/minutes)
+    (#\S . :seconds)))
+
+(defun iso-8601-delimiter (elt)
+  (cdr (assoc elt *iso-8601-duration-delimiters*)))
+
+(defun iso-8601-duration-subseq (string end)
+  (let* ((pos (position-if #'iso-8601-delimiter string :end end :from-end t))
+	 (pos2 (when pos
+		 (position-if-not #'digit-char-p string :end pos :from-end t)))
+	 (number (when pos2
+		   (parse-integer
+		    (subseq string (1+ pos2) pos) :junk-allowed t))))
+    (when number
+      (values number
+	      (1+ pos)
+	      (1+ pos2)
+	      (iso-8601-delimiter (aref string pos))))))
+
+(defun parse-iso-8601-duration (string)
+  "return a wall-time from a duration string"
+  (block parse
+    (let ((years 0)
+	  (months 0)
+	  (days 0)
+	  (secs 0)
+	  (hours 0)
+	  (minutes 0)
+	  (index (length string))
+	  (months/minutes nil))
+      (loop
+       (multiple-value-bind (duration next-index duration-type)
+           (iso-8601-duration-subseq string index)
+         (case duration-type
+	   (:years
+	    (incf years duration))
+	   (:months/minutes
+	    (if months/minutes
+		(incf months duration)
+		(progn
+		  (setq months/minutes t)
+		  (incf minutes duration))))
+           (:days
+	    (setq months/minutes t)
+            (incf days duration))
+           (:hours
+	    (setq months/minutes t)
+            (incf hours duration))
+           (:seconds
+            (incf secs duration))
+           (t
+            (return-from parse
+	      (make-duration
+	       :year years :month months :day days :hour hours
+	       :minute minutes :second secs))))
+         (setf index next-index))))))
+
+;; e.g. 2000-11-11 00:00:00-06
+
+(defun parse-iso-8601-time (string)
+  "return the wall-time corresponding to the given ISO 8601 datestring"
+  (multiple-value-bind (year month day hour minute second usec offset)
+      (syntax-parse-iso-8601 string)
+    (make-time :year year
+               :month month
+               :day day
+               :hour hour
+               :minute minute
+               :second second
+               :usec usec
+               :offset offset)))
+
+
+(defun syntax-parse-iso-8601 (string)
+  ;; use strlen to determine if fractional seconds are present in timestamp
+  (let ((strlen (length string))
+        year month day hour minute second usec gmt-sec-offset)
+    (handler-case
+        (progn
+          (setf year           (parse-integer string :start 0 :end 4)
+                month          (parse-integer string :start 5 :end 7)
+                day            (parse-integer string :start 8 :end 10)
+                hour           (if (<= 13 strlen)
+                                   (parse-integer string :start 11 :end 13)
+                                   0)
+                minute         (if (<= 16 strlen)
+                                   (parse-integer string :start 14 :end 16)
+                                   0)
+                second         (if (<= 19 strlen)
+                                   (parse-integer string :start 17 :end 19)
+                                   0))
+          (cond
+            ((and (> strlen 19)
+		  (or (char= #\, (char string 19))
+		      (char= #\. (char string 19))))
+             (multiple-value-bind (parsed-usec usec-end)
+                 (parse-integer string :start 20 :junk-allowed t)
+               (setf usec          (or parsed-usec 0)
+                     gmt-sec-offset (if (<= (+ 3 usec-end)  strlen)
+                                        (let ((skip-to (or (position #\+ string :start 19)
+                                                           (position #\- string :start 19))))
+                                          (if skip-to
+                                              (* 60 60
+                                                 (parse-integer string :start skip-to
+                                                                :end (+ skip-to 3)))
+                                              0))
+                                        0))))
+            (t
+             (setf usec           0
+                   gmt-sec-offset (if (<= 22  strlen)
+                                      (let ((skip-to (or (position #\+ string :start 19)
+                                                         (position #\- string :start 19))))
+                                        (if skip-to
+                                            (* 60 60
+                                               (parse-integer string :start skip-to
+                                                              :end (+ skip-to 3)))
+                                            0))
+                                      0))))
+          (unless (< 0 year)
+            (error 'iso-8601-syntax-error
+                   :bad-component '(year . 0)))
+          (unless (< 0 month)
+            (error 'iso-8601-syntax-error
+                   :bad-component '(month . 0)))
+          (unless (< 0 day)
+            (error 'iso-8601-syntax-error
+                   :bad-component '(month . 0)))
+          (values year month day hour minute second usec gmt-sec-offset))
+      (simple-error ()
+        (error 'iso-8601-syntax-error
+               :bad-component
+               (car (find-if (lambda (pair) (null (cdr pair)))
+                             `((year . ,year) (month . ,month)
+                               (day . ,day) (hour . ,hour)
+                               (minute . ,minute) (second . ,second)
+			       (usec . ,usec)
+                               (timezone . ,gmt-sec-offset)))))))))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\types.lisp clsql\sql\types.lisp
--- clsql-3.7.4\sql\types.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\sql\types.lisp	Tue Oct 10 10:15:24 2006
@@ -0,0 +1,131 @@
+(in-package #:clsql-sys)
+
+(defmethod database-get-type-specifier (type args database db-type)
+  (declare (ignore type args database db-type))
+  (format nil "VARCHAR(~D)" *default-string-length*))
+
+(defmethod database-get-type-specifier ((type (eql 'integer)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "INT(~A)" (car args))
+    "INT"))
+
+(deftype tinyint ()
+  "An 8-bit integer, this width may vary by SQL implementation."
+  'integer)
+
+(defmethod database-get-type-specifier ((type (eql 'tinyint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INT")
+
+(deftype smallint ()
+  "An integer smaller than a 32-bit integer. this width may vary by SQL implementation."
+  'integer)
+
+(defmethod database-get-type-specifier ((type (eql 'smallint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INT")
+
+(deftype mediumint ()
+  "An integer smaller than a 32-bit integer, but may be larger than a smallint. This width may vary by SQL implementation."
+  'integer)
+
+(defmethod database-get-type-specifier ((type (eql 'mediumint)) args database db-type)
+  (declare (ignore args database db-type))
+  "INT")
+
+(deftype bigint ()
+  "An integer larger than a 32-bit integer, this width may vary by SQL implementation."
+  'integer)
+
+(defmethod database-get-type-specifier ((type (eql 'bigint)) args database db-type)
+  (declare (ignore args database db-type))
+  "BIGINT")
+
+(deftype varchar (&optional size)
+  "A variable length string for the SQL varchar type."
+  (declare (ignore size))
+  'string)
+
+(defmethod database-get-type-specifier ((type (eql 'varchar)) args
+                                        database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "VARCHAR(~A)" (car args))
+      (format nil "VARCHAR(~D)" *default-string-length*)))
+
+(defmethod database-get-type-specifier ((type (eql 'string)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "CHAR(~A)" (car args))
+      (format nil "VARCHAR(~D)" *default-string-length*)))
+
+(deftype universal-time ()
+  "A positive integer as returned by GET-UNIVERSAL-TIME."
+  '(integer 1 *))
+
+(defmethod database-get-type-specifier ((type (eql 'universal-time)) args database db-type)
+  (declare (ignore args database db-type))
+  "BIGINT")
+
+(defmethod database-get-type-specifier ((type (eql 'wall-time)) args database db-type)
+  (declare (ignore args database db-type))
+  "TIMESTAMP")
+
+(defmethod database-get-type-specifier ((type (eql 'date)) args database db-type)
+  (declare (ignore args database db-type))
+  "DATE")
+
+(defmethod database-get-type-specifier ((type (eql 'duration)) args database db-type)
+  (declare (ignore database args db-type))
+  "VARCHAR")
+
+(defmethod database-get-type-specifier ((type (eql 'money)) args database db-type)
+  (declare (ignore database args db-type))
+  "INT8")
+
+#+ignore
+(deftype char (&optional len)
+  "A lisp type for the SQL CHAR type."
+  `(string ,len))
+
+(defmethod database-get-type-specifier ((type (eql 'float)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "FLOAT(~A)" (car args))
+      "FLOAT"))
+
+(defmethod database-get-type-specifier ((type (eql 'long-float)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "FLOAT(~A)" (car args))
+      "FLOAT"))
+
+(deftype generalized-boolean ()
+  "A type which outputs a SQL boolean value, though any lisp type can be stored in the slot."
+  t)
+
+(defmethod database-get-type-specifier ((type (eql 'boolean)) args database db-type)
+  (declare (ignore args database db-type))
+  "BOOL")
+
+(defmethod database-get-type-specifier ((type (eql 'generalized-boolean)) args database db-type)
+  (declare (ignore args database db-type))
+  "BOOL")
+
+(defmethod database-get-type-specifier ((type (eql 'number)) args database db-type)
+  (declare (ignore database db-type))
+  (cond
+   ((and (consp args) (= (length args) 2))
+    (format nil "NUMBER(~D,~D)" (first args) (second args)))
+   ((and (consp args) (= (length args) 1))
+    (format nil "NUMBER(~D)" (first args)))
+   (t
+    "NUMBER")))
+
+(defmethod database-get-type-specifier ((type (eql 'char)) args database db-type)
+  (declare (ignore database db-type))
+  (if args
+      (format nil "CHAR(~D)" (first args))
+      "CHAR(1)"))
+
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\sql\utils.lisp clsql\sql\utils.lisp
--- clsql-3.7.4\sql\utils.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\sql\utils.lisp	Thu Aug 03 16:56:03 2006
@@ -59,7 +59,7 @@
 
 (defmacro without-interrupts (&body body)
   #+allegro `(mp:without-scheduling ,@body)
-  #+clisp `(progn ,@body)
+  #+(or cormanlisp clisp) `(progn ,@body)
   #+cmu `(system:without-interrupts ,@body)
   #+lispworks `(mp:without-preemption ,@body)
   #+openmcl `(ccl:without-interrupts ,@body)
@@ -245,7 +245,10 @@
 	      error
 	      (nth-value 1 (ccl::external-process-status process))))
   
-    #-(or openmcl clisp lispworks allegro scl cmu sbcl)
+    #+cormanlisp
+    (declare (ignore command))
+
+    #-(and openmcl clisp lispworks allegro scl cmu sbcl)
     (error "COMMAND-OUTPUT not implemented for this Lisp")
 
     ))
Binary files clsql-3.7.4\sqlite3.dll and clsql\sqlite3.dll differ
Binary files clsql-3.7.4\sqlite3.exe and clsql\sqlite3.exe differ
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\stupid\package.lisp clsql\stupid\package.lisp
--- clsql-3.7.4\stupid\package.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\stupid\package.lisp	Tue Sep 05 21:51:44 2006
@@ -0,0 +1,597 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:          package.lisp
+;;;; Purpose:       Package definition for SQL interface
+;;;;
+;;;; $Id: package.lisp 10845 2005-11-26 16:08:12Z kevin $
+;;;; 
+;;;; This file is part of CLSQL.
+;;;;
+;;;; CLSQL users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+(in-package #:cl-user)
+
+;;;; This file makes the required package definitions for CLSQL's
+;;;; core packages.
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ #+sbcl
+  (if (find-package 'sb-mop)
+      (pushnew :clsql-sbcl-mop cl:*features*)
+      (pushnew :clsql-sbcl-pcl cl:*features*))
+  
+  #+cmu
+  (if (eq (symbol-package 'pcl:find-class)
+      (find-package 'common-lisp))
+      (pushnew :clsql-cmucl-mop cl:*features*)
+      (pushnew :clsql-cmucl-pcl cl:*features*)))
+
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  (defpackage #:clsql-sys
+    (:use #:common-lisp
+          #+clsql-sbcl-mop #:sb-mop
+          #+clsql-cmucl-mop #:mop
+          #+allegro #:mop
+          #+clisp #:clos
+          #+lispworks #:clos
+          #+scl #:clos
+          #+openmcl #:openmcl-mop)
+
+    #+allegro
+    (:shadowing-import-from 
+     #:excl)
+    #+clisp
+    (:shadowing-import-from 
+     #:clos)
+    #+lispworks
+    (:shadowing-import-from 
+     #:clos)
+    #+clsql-sbcl-mop 
+    (:shadowing-import-from 
+     #:sb-pcl
+     #:generic-function-lambda-list)
+    #+clsql-sbcl-pcl
+    (:shadowing-import-from 
+     #:sb-pcl
+     #:name
+     #:class-direct-slots
+     #:class-of #:class-name #:class-slots #:find-class
+     #:slot-boundp
+     #:standard-class
+     #:slot-definition-name #:finalize-inheritance
+     #:standard-direct-slot-definition
+     #:standard-effective-slot-definition #:validate-superclass
+     #:direct-slot-definition-class #:compute-effective-slot-definition
+     #:effective-slot-definition-class
+     #:slot-value-using-class
+     #:class-prototype #:generic-function-method-class #:intern-eql-specializer
+     #:make-method-lambda #:generic-function-lambda-list
+     #:class-precedence-list #:slot-definition-type
+     #:class-direct-superclasses
+     #:compute-class-precedence-list)
+    #+clsql-cmucl-mop 
+    (:shadowing-import-from 
+     #:pcl
+     #:generic-function-lambda-list)
+    #+clsql-cmucl-pcl
+    (:shadowing-import-from 
+     #:pcl
+     #:class-direct-slots
+     #:name
+     #:class-of  #:class-name #:class-slots #:find-class #:standard-class
+     #:slot-boundp
+     #:slot-definition-name #:finalize-inheritance
+     #:standard-direct-slot-definition #:standard-effective-slot-definition
+     #:validate-superclass #:direct-slot-definition-class
+     #:effective-slot-definition-class
+     #:compute-effective-slot-definition
+     #:slot-value-using-class
+     #:class-prototype #:generic-function-method-class #:intern-eql-specializer
+     #:make-method-lambda #:generic-function-lambda-list
+     #:class-precedence-list #:slot-definition-type
+     #:class-direct-superclasses
+     #:compute-class-precedence-list)
+    #+scl
+    (:shadowing-import-from 
+     #:clos
+     #:class-prototype ;; note: make-method-lambda is not fbound
+     )
+    
+    (:export
+     ;; "Private" exports for use by interface packages
+     #:check-connection-spec
+     #:database-initialize-database-type
+     #:database-type-load-foreign
+     #:database-connect
+     #:database-disconnect
+     #:database-reconnect
+     #:database-query
+     #:database-execute-command
+     #:database-create-sequence
+     #:database-drop-sequence
+     #:database-sequence-next
+     #:database-set-sequence-position
+     #:database-query-result-set
+     #:database-dump-result-set
+     #:database-store-next-row
+     #:database-list-tables
+     #:database-list-tables-and-sequences
+     #:database-table-exists-p
+     #:database-list-views
+     #:database-view-exists-p
+     #:database-list-indexes
+     #:database-list-table-indexes
+     #:database-index-exists-p
+     #:database-list-sequences
+     #:database-sequence-last
+     #:database-sequence-exists-p
+     #:database-list-attributes
+     #:database-attribute-type
+     #:database-type-library-loaded
+     #:database-create
+     #:database-destroy
+     #:database-probe
+     #:database-list
+     
+     #:db-backend-has-create/destroy-db?
+     #:db-type-has-views?
+     #:db-type-has-bigint?
+     #:db-type-has-union?
+     #:db-type-has-prepared-stmt?
+     #:db-type-has-subqueries?
+     #:db-type-has-boolean-where?
+     #:db-type-transaction-capable?
+     #:db-type-has-fancy-math?
+     #:db-type-default-case
+     #:db-type-use-column-on-drop-index? 
+     #:db-type-use-fully-qualified-column-on-drop-index?
+     #:db-type-has-intersect?
+     #:db-type-has-except?
+     #:database-underlying-type
+     #:database-get-type-specifier
+     #:read-sql-value
+     #:database-output-sql-as-type
+     #:*loaded-database-types*
+     #:reload-database-types
+     #:is-database-open
+
+     ;; Large objects 
+     #:database-create-large-object
+     #:database-write-large-object
+     #:database-read-large-object
+     #:database-delete-large-object
+     #:create-large-object
+     #:write-large-object
+     #:read-large-object
+     #:delete-large-object
+
+     ;; Prepared statments
+     #:database-prepare
+     #:database-run-prepared
+     #:database-bind-parameter
+     #:database-free-prepared
+
+     ;; accessors for database class
+     #:name
+     #:connection-spec
+     #:transaction
+     #:transaction-level
+     #:conn-pool
+     #:command-recording-stream
+     #:result-recording-stream
+     #:record-caches
+     #:view-classes
+     #:database-state
+     #:attribute-cache
+     #:database-autocommit
+
+     ;; utils.lisp
+     #:without-interrupts
+     #:make-process-lock
+     #:with-process-lock
+     #:command-output
+     #:symbol-name-default-case
+     #:convert-to-db-default-case
+     #:ensure-keyword
+     #:getenv
+     #:number-to-sql-string
+     #:float-to-sql-string
+     #:sql-escape-quotes
+     #:sql-escape 
+     #:in
+
+     ;; Generic backends
+     #:generic-postgresql-database
+     #:generic-odbc-database
+
+     ;; Subclasses of sql-expresssion (expressions.lisp) 
+     #:sql-function-exp
+     #:sql-value-exp 
+     #:sql-set-exp 
+     #:sql-query-modifier-exp 
+     #:sql-relational-exp 
+     #:sql-upcase-like 
+     #:sql-assignment-exp 
+     #:sql-typecast-exp 
+     #:sql-between-exp 
+     #:sql-ident 
+     #:sql-ident-attribute
+     #:sql-ident-table 
+
+     .
+
+     ;; Shared exports for re-export by CLSQL package. 
+     #1=(
+
+         ;; foreign library loading
+         #:*foreign-library-search-paths*
+         #:push-library-path
+
+         ;; Condition system (conditions.lisp) 
+         #:sql-user-error
+         #:sql-database-error
+         #:sql-database-data-error
+         #:sql-connection-error
+         #:sql-temporary-error
+         #:sql-timeout-error 
+         #:sql-fatal-error 
+         #:sql-error-error-id
+         #:sql-error-secondary-error-id
+         #:sql-error-database-message
+         ;; CLSQL Extensions
+         #:sql-condition
+         #:sql-error
+         #:sql-warning
+         #:sql-database-warning
+         #:sql-error-database 
+         #:sql-error-database-type 
+         #:sql-error-connection-spec 
+         #:sql-error-expression 
+         #:sql-warning-database 
+         #:sql-user-error-message 
+         #:*backend-warning-behavior*
+
+         ;; Connection/initialisation (base-classes.lisp, database.lisp, 
+         ;;   initialize.lisp)
+         #:*default-database-type*       
+         #:*default-database*            
+         #:*initialized-database-types*
+         #:initialize-database-type
+         #:connect                     
+         #:disconnect              
+         #:*connect-if-exists*         
+         #:connected-databases         
+         #:database            
+         #:database-name               
+         #:reconnect                   
+         #:find-database               
+         #:status                      
+         ;; CLSQL Extensions 
+         #:database-name-from-spec
+         #:database-type 
+         #:with-database
+         #:with-default-database
+         #:disconnect-pooled
+         #:list-databases
+         #:create-database
+         #:destroy-database
+         #:probe-database
+
+         ;; I/O Recording (recording.lisp) 
+         #:add-sql-stream             
+         #:delete-sql-stream          
+         #:list-sql-streams       
+         #:sql-recording-p        
+         #:sql-stream           
+         #:start-sql-recording      
+         #:stop-sql-recording       
+
+         ;; FDDL (fddl.lisp) 
+         #:create-table                   
+         #:drop-table                     
+         #:list-tables                    
+         #:table-exists-p                 
+         #:list-attributes                
+         #:attribute-type                 
+         #:list-attribute-types       
+         #:create-view                    
+         #:drop-view                      
+         #:create-index                   
+         #:drop-index                     
+         ;; CLSQL Extensions 
+         #:truncate-database
+         #:list-views                  
+         #:view-exists-p               
+         #:list-indexes                
+         #:index-exists-p              
+         #:create-sequence             
+         #:drop-sequence               
+         #:list-sequences              
+         #:sequence-exists-p           
+         #:sequence-next               
+         #:sequence-last               
+         #:set-sequence-position       
+
+         ;; FDML (fdml.lisp) 
+         #:select 
+         #:cache-table-queries     
+         #:*cache-table-queries-default*
+         #:delete-records               
+         #:insert-records               
+         #:update-records               
+         #:execute-command              
+         #:query                        
+         #:print-query                  
+         #:do-query                     
+         #:map-query                    
+         #:loop
+         ;; CLSQL Extensions 
+         #:prepare-sql
+         #:bind-parameter
+         #:run-prepared-sql
+         #:free-prepared-sql
+
+         ;; Transaction handling (transaction.lisp) 
+         #:with-transaction
+         #:commit                        
+         #:rollback          
+         ;; CLSQL Extensions 
+         #:add-transaction-commit-hook
+         #:add-transaction-rollback-hook
+         #:start-transaction             
+         #:in-transaction-p              
+         #:set-autocommit
+
+         ;; OODDL (ooddl.lisp) 
+         #:standard-db-object               
+         #:def-view-class                   
+         #:create-view-from-class           
+         #:drop-view-from-class             
+         #:list-classes                     
+         #:universal-time    
+         ;; CLSQL Extensions 
+         #:view-table        
+         #:bigint
+         #:varchar
+         #:generalized-boolean
+         #:mediumint
+         #:smallint
+         #:tinyint
+         #:*default-string-length*
+
+         ;; OODML (oodml.lisp) 
+         #:instance-refreshed               
+         #:update-objects-joins             
+         #:*default-update-objects-max-len* 
+         #:*default-caching*
+         #:update-slot-from-record          
+         #:update-instance-from-records     
+         #:update-records-from-instance     
+         #:update-record-from-slot          
+         #:update-record-from-slots         
+         #:delete-instance-records          
+         ;; CLSQL Extensions 
+         #:*db-auto-sync*    
+         #:write-instance-to-stream
+         #:read-instance-from-stream
+     
+         ;; Symbolic SQL Syntax (syntax.lisp) 
+         #:sql                              
+         #:sql-expression                   
+         #:sql-operation                    
+         #:sql-operator                     
+         #:disable-sql-reader-syntax        
+         #:enable-sql-reader-syntax         
+         #:locally-disable-sql-reader-syntax
+         #:locally-enable-sql-reader-syntax 
+         #:restore-sql-reader-syntax-state  
+     
+         ;; SQL operations (operations.lisp) 
+         #:sql-query
+         #:sql-object-query
+         #:sql-any
+         #:sql-some 
+         #:sql-all
+         #:sql-not
+         #:sql-union
+         #:sql-intersect
+         #:sql-minus
+         #:sql-except 
+         #:sql-order-by 
+         #:sql-null
+         #:sql-*
+         #:sql-+
+         #:sql-/
+         #:sql--
+         #:sql-like
+         #:sql-and
+         #:sql-or
+         #:sql-in
+         #:sql-substr 
+         #:sql-concat-op 
+         #:sql-=
+         #:sql-<
+         #:sql->
+         #:sql->=
+         #:sql-<=
+         #:sql-<>
+         #:sql-count
+         #:sql-max
+         #:sql-min
+         #:sql-avg
+         #:sql-sum
+         #:sql-function 
+         #:sql-between 
+         #:sql-distinct 
+         #:sql-nvl 
+         #:sql-slot-value
+         #:sql-userenv 
+         ;; CLSQL Extensions 
+         #:sql-concat
+         #:sql-substring 
+         #:sql-limit 
+         #:sql-group-by
+         #:sql-having
+         #:sql-not-null
+         #:sql-exists
+         #:sql-uplike
+         #:sql-is
+         #:sql-==
+         #:sql-the 
+         #:sql-coalesce 
+         #:sql-view-class
+
+         ;; Time handling (time.lisp) 
+         #:bad-component
+         #:current-day
+         #:current-month
+         #:current-year
+         #:day-duration
+         #:db-timestring
+         #:db-datestring
+         #:decode-duration
+         #:decode-time
+         #:decode-date
+         #:duration
+         #:duration+
+         #:duration<
+         #:duration<=
+         #:duration=
+         #:duration>
+         #:duration>=
+         #:duration-day
+         #:duration-hour
+         #:duration-minute
+         #:duration-month
+         #:duration-second
+         #:duration-year
+         #:duration-reduce 
+         #:duration-timestring
+         #:extract-roman 
+         #:format-duration
+         #:format-time
+         #:format-date
+         #:get-time
+         #:get-date
+         #:utime->time
+         #:interval-clear
+         #:interval-contained
+         #:interval-data
+         #:interval-edit
+         #:interval-end
+         #:interval-match
+         #:interval-push
+         #:interval-relation
+         #:interval-start
+         #:interval-type
+         #:make-duration
+         #:make-interval
+         #:make-time
+         #:make-date
+         #:merged-time
+         #:midnight
+         #:month-name
+         #:parse-date-time
+         #:parse-timestring
+         #:parse-datestring
+         #:parse-yearstring
+         #:print-date
+         #:roll
+         #:roll-to
+         #:time
+         #:time+
+         #:time-
+         #:time-by-adding-duration
+         #:time-compare
+         #:time-difference
+         #:time-dow
+         #:time-element
+         #:time-max
+         #:time-min
+         #:time-mjd
+         #:time-msec
+         #:time-p
+         #:time-sec
+         #:time-well-formed
+         #:time-ymd
+         #:time<
+         #:time<=
+         #:time=
+         #:time>
+         #:time>=
+         #:date
+         #:date+
+         #:date-
+         #:date-difference
+         #:date-compare
+         #:date-dow
+         #:date-element
+         #:date-max
+         #:date-min
+         #:date-mjd
+         #:date-p
+         #:date-ymd
+         #:date<
+         #:date<=
+         #:date=
+         #:date>
+         #:date>=
+         #:timezone
+         #:universal-time
+         #:wall-time
+         #:wall-timestring
+         #:week-containing
+         #:gregorian-to-mjd
+         #:mjd-to-gregorian
+         ))
+    (:documentation "This is the INTERNAL SQL-Interface package of CLSQL."))
+
+
+(defpackage #:clsql
+    (:use #:common-lisp)
+    (:import-from #:clsql-sys . #1#)
+    (:export . #1#)
+    (:documentation "This is the user package with CLSQL symbols."))
+
+(defpackage #:clsql-user
+    (:use #:common-lisp)
+    (:import-from #:clsql-sys . #1#)
+    (:export . #1#)
+    (:documentation "This is the user package with CLSQL symbols."))
+
+  ;; This is from USQL's pcl-patch  
+  #+(or clsql-sbcl-pcl clsql-cmucl-pcl)
+  (progn
+    ;; Note that this will no longer required for cmucl as of version 19a. 
+    (in-package #+cmu :pcl #+sbcl :sb-pcl)
+    (defmacro pv-binding1 ((pv calls pv-table-symbol pv-parameters slot-vars) 
+               &body body)
+      `(pv-env (,pv ,calls ,pv-table-symbol ,pv-parameters)
+    (let (,@(mapcar #'(lambda (slot-var p) `(,slot-var (get-slots-or-nil ,p)))
+            slot-vars pv-parameters))
+      ,@(mapcar #'(lambda (slot-var) `(declare (ignorable ,slot-var))) slot-vars)
+      ,@body))))
+
+;; see http://thread.gmane.org/gmane.lisp.lispworks.general/681
+#+lispworks
+(setf *packages-for-warn-on-redefinition* 
+        (delete "SQL" *packages-for-warn-on-redefinition* :test 'string=))
+
+  #+sbcl
+  (if (find-package 'sb-mop)
+      (setq cl:*features* (delete :clsql-sbcl-mop cl:*features*))
+      (setq cl:*features* (delete :clsql-sbcl-pcl cl:*features*)))
+  
+  #+cmu
+  (if (find-package 'mop)
+      (setq cl:*features* (delete :clsql-cmucl-mop cl:*features*))
+      (setq cl:*features* (delete :clsql-cmucl-pcl cl:*features*)))
+
+) ;eval-when                                      
+
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\test-corman-sqlite3.lisp clsql\test-corman-sqlite3.lisp
--- clsql-3.7.4\test-corman-sqlite3.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\test-corman-sqlite3.lisp	Fri Sep 22 15:38:57 2006
@@ -0,0 +1,27 @@
+(load "/dev/clsql/clsql-corman-test.lisp")
+(clsql:push-library-path "/dev/clsql/")
+(setf *default-database-type* :sqlite3)
+(use-package '#:clsql)
+(initialize-database-type)
+(connect '("test"))
+(enable-sql-reader-syntax)
+(defvar tables (list-tables))
+(if (not (table-exists-p [moderators]))
+    (create-table [moderators] '(([id] integer) ([name] (string 10)) ([hashed_password] (string 40)))))
+(if (not (table-exists-p [conversations]))
+    (create-table [conversations] '(([id] integer) ([name] (string 40)) ([closed] boolean) ([moderator] (string 40)))))
+(if (not (table-exists-p [messages]))
+    (create-table [messages] '(([id] integer) ([conversation_id] integer) ([who] (string 40)) ([message] text))))
+(if (not (table-exists-p [foo2]))
+    (progn
+      (create-table [foo2] '(([id] integer) ([height] float) ([name] (string 24)) ([comments] longchar)))
+      (insert-records :into [foo2] :attributes '(id height name comments) :values '(1 5 "Jay" "Idiot"))
+      (insert-records :into [foo2] :attributes '(id height name comments) :values '(2 4 "Megan" "Mom"))
+      (insert-records :into [foo2] :attributes '(id height name comments) :values '(3 3 "Tanis" "Son"))))
+(select [id] [name] :from [foo2] :field-names nil)
+(output-sql (make-query [[id] [name] :from [foo2]]))
+(query "select id, name from foo2;")
+(let ((result '()))
+  (do-query ((id height name comments) [select [id] [height] [name] [comments] :from [foo2]])
+             (push (list id height name comments) result))
+  result)
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\test.lisp clsql\test.lisp
--- clsql-3.7.4\test.lisp	Wed Dec 31 16:00:00 1969
+++ clsql\test.lisp	Sat Sep 30 11:01:13 2006
@@ -0,0 +1,34 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:          mysql-package.cl
+;;;; Purpose:       Package definition for low-level MySQL interface
+;;;; Programmers:   Kevin M. Rosenberg
+;;;; Date Started:  Feb 2002
+;;;;
+;;;; $Id: mysql-package.lisp 9532 2004-05-30 19:16:34Z kevin $
+;;;;
+;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
+;;;;
+;;;; CLSQL users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+(in-package #:cl-user)
+
+(macroexpand-all '(defpackage #:mysql
+    (:use #:common-lisp)
+    (:export 
+     #:database-library-loaded
+     
+     #:mysql-net-type#tcp-ip
+
+;;      #:mysql-net-type   ;#socket
+;;      #:mysql-net-type   ;#named-pipe
+     )
+    (:documentation "This is the low-level interface MySQL.")))
+
+
+mysql-net-type#tcp-ip
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\tests\test-init.lisp clsql\tests\test-init.lisp
--- clsql-3.7.4\tests\test-init.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\tests\test-init.lisp	Mon Sep 25 22:45:13 2006
@@ -36,6 +36,7 @@
 (defclass thing ()
   ((extraterrestrial :initform nil :initarg :extraterrestrial)))
 
+#-:cormanlisp
 (def-view-class person (thing)
   ((height :db-kind :base :accessor height :type float
            :initarg :height)
@@ -45,6 +46,7 @@
    (bd-utime :type clsql:universal-time :initarg :bd-utime)
    (hobby :db-kind :virtual :initarg :hobby :initform nil)))
   
+#-:cormanlisp
 (def-view-class employee (person)
   ((emplid
     :db-kind :key
@@ -98,6 +100,7 @@
 			  :set t)))
   (:base-table employee))
 
+#-:cormanlisp
 (def-view-class company ()
   ((companyid
     :db-kind :key
@@ -130,6 +133,7 @@
 			  :foreign-key (ecompanyid groupid)
 			  :set t))))
 
+#-:cormanlisp
 (def-view-class address ()
   ((addressid
     :db-kind :key
@@ -156,6 +160,7 @@
   (:base-table addr))
 
 ;; many employees can reside at many addressess
+#-:cormanlisp
 (def-view-class employee-address ()
   ((aemplid :type integer :initarg :emplid)
    (aaddressid :type integer :initarg :addressid)
@@ -172,6 +177,7 @@
 				  :retrieval :immediate)))
   (:base-table "ea_join"))
 
+#-:cormanlisp
 (def-view-class deferred-employee-address ()
   ((aemplid :type integer :initarg :emplid)
    (aaddressid :type integer :initarg :addressid)
@@ -184,6 +190,7 @@
 				  :set nil)))
   (:base-table "ea_join"))
 
+#-:cormanlisp
 (def-view-class big ()
   ((i :type integer :initarg :i)
    (bi :type bigint :initarg :bi)))
diff -NrubB --exclude=.svn --exclude=*.fasl --exclude=*.*~ --exclude=*.bak clsql-3.7.4\uffi\clsql-uffi-loader.lisp clsql\uffi\clsql-uffi-loader.lisp
--- clsql-3.7.4\uffi\clsql-uffi-loader.lisp	Tue Oct 03 05:03:28 2006
+++ clsql\uffi\clsql-uffi-loader.lisp	Thu Oct 05 20:56:26 2006
@@ -7,7 +7,7 @@
 ;;;; Author:   Kevin M. Rosenberg
 ;;;; Created:  Mar 2002
 ;;;;
-;;;; $Id: clsql-uffi-loader.lisp 11102 2006-09-06 12:51:12Z kevin $
+;;;; $Id: clsql-uffi-loader.lisp 10922 2006-05-03 14:39:10Z kevin $
 ;;;;
 ;;;; This file, part of CLSQL, is Copyright (c) 2002-2004 by Kevin M. Rosenberg
 ;;;;
@@ -18,7 +18,7 @@
 
 (in-package #:clsql-uffi)
 
-(defun find-and-load-foreign-library (filenames &key module supporting-libraries (errorp t))
+(defun find-and-load-foreign-library (filenames &key module supporting-libraries call-type (errorp t))
   "Attempt to load a foreign library. This will search for any of the filenames, as
 well as any of the filenames in any of the clsql:*foreign-library-search-paths*"
   (setq filenames (if (listp filenames) filenames (list filenames)))
@@ -27,7 +27,8 @@
 	   (handler-case
 	       (uffi:load-foreign-library testpath
 					  :module module
-					  :supporting-libraries supporting-libraries)
+					  :supporting-libraries supporting-libraries
+                      :call-type call-type)
 	     (error (c) (warn "~A" c) nil))))
     (or
      (loop for type in (uffi:foreign-library-types)
@@ -43,9 +44,8 @@
 	      (length filenames) filenames
 	      'clsql:*foreign-library-search-paths*)))))
 
-;; searches clsql_uffi64 to accomodate both 32-bit and 64-bit libraries on same system
 (defvar *clsql-uffi-library-filenames*
-  `(,@(when (> most-positive-fixnum (expt 2 32)) (list "clsql_uffi64"))
+  (list #+(or 64bit x86-64) "clsql_uffi64"
     "clsql_uffi"))
 
 (defvar *clsql-uffi-supporting-libraries* '("c")
Binary files clsql-3.7.4\uffi\clsql_uffi.dll and clsql\uffi\clsql_uffi.dll differ

