amalgalite 1.1.2-x86-mswin32 → 1.3.0-x86-mswin32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.md +49 -0
  3. data/{HISTORY.rdoc → HISTORY.md} +96 -73
  4. data/LICENSE +2 -2
  5. data/Manifest.txt +104 -0
  6. data/README.md +73 -0
  7. data/Rakefile +25 -0
  8. data/TODO.md +50 -0
  9. data/ext/amalgalite/{amalgalite3.c → c/amalgalite.c} +12 -12
  10. data/ext/amalgalite/{amalgalite3.h → c/amalgalite.h} +5 -5
  11. data/ext/amalgalite/{amalgalite3_blob.c → c/amalgalite_blob.c} +2 -2
  12. data/ext/amalgalite/{amalgalite3_constants.c → c/amalgalite_constants.c} +2 -2
  13. data/ext/amalgalite/{amalgalite3_database.c → c/amalgalite_database.c} +49 -21
  14. data/ext/amalgalite/{amalgalite3_requires_bootstrap.c → c/amalgalite_requires_bootstrap.c} +131 -58
  15. data/ext/amalgalite/{amalgalite3_statement.c → c/amalgalite_statement.c} +2 -2
  16. data/ext/amalgalite/{extconf.rb → c/extconf.rb} +4 -4
  17. data/ext/amalgalite/{gen_constants.rb → c/gen_constants.rb} +3 -3
  18. data/ext/amalgalite/c/notes.txt +134 -0
  19. data/ext/amalgalite/{sqlite3.c → c/sqlite3.c} +94602 -80497
  20. data/ext/amalgalite/{sqlite3.h → c/sqlite3.h} +1047 -216
  21. data/ext/amalgalite/{sqlite3_options.h → c/sqlite3_options.h} +0 -0
  22. data/ext/amalgalite/{sqlite3ext.h → c/sqlite3ext.h} +40 -13
  23. data/lib/amalgalite.rb +13 -6
  24. data/lib/amalgalite/1.8/amalgalite.so +0 -0
  25. data/lib/amalgalite/1.9/amalgalite.so +0 -0
  26. data/lib/amalgalite/2.0/amalgalite.so +0 -0
  27. data/lib/amalgalite/column.rb +7 -5
  28. data/lib/amalgalite/database.rb +18 -10
  29. data/lib/amalgalite/packer.rb +5 -2
  30. data/lib/amalgalite/requires.rb +47 -16
  31. data/lib/amalgalite/schema.rb +63 -36
  32. data/lib/amalgalite/sqlite3/version.rb +0 -1
  33. data/lib/amalgalite/statement.rb +7 -5
  34. data/lib/amalgalite/table.rb +9 -8
  35. data/lib/amalgalite/type_maps/default_map.rb +0 -1
  36. data/lib/amalgalite/type_maps/storage_map.rb +0 -2
  37. data/lib/amalgalite/type_maps/text_map.rb +0 -1
  38. data/lib/amalgalite/version.rb +3 -32
  39. data/spec/aggregate_spec.rb +1 -1
  40. data/spec/amalgalite_spec.rb +1 -1
  41. data/spec/blob_spec.rb +1 -1
  42. data/spec/boolean_spec.rb +2 -1
  43. data/spec/busy_handler.rb +1 -1
  44. data/spec/database_spec.rb +16 -11
  45. data/spec/default_map_spec.rb +1 -1
  46. data/spec/function_spec.rb +1 -1
  47. data/spec/integeration_spec.rb +2 -1
  48. data/spec/packer_spec.rb +4 -4
  49. data/spec/paths_spec.rb +1 -1
  50. data/spec/progress_handler_spec.rb +4 -5
  51. data/spec/requires_spec.rb +36 -2
  52. data/spec/rtree_spec.rb +6 -5
  53. data/spec/schema_spec.rb +28 -20
  54. data/spec/spec_helper.rb +2 -7
  55. data/spec/sqlite3/constants_spec.rb +1 -1
  56. data/spec/sqlite3/database_status_spec.rb +4 -4
  57. data/spec/sqlite3/status_spec.rb +5 -5
  58. data/spec/sqlite3/version_spec.rb +7 -7
  59. data/spec/sqlite3_spec.rb +3 -3
  60. data/spec/statement_spec.rb +3 -4
  61. data/spec/storage_map_spec.rb +1 -1
  62. data/spec/tap_spec.rb +4 -4
  63. data/spec/text_map_spec.rb +1 -1
  64. data/spec/type_map_spec.rb +1 -1
  65. data/spec/version_spec.rb +2 -9
  66. data/tasks/custom.rake +99 -0
  67. data/tasks/default.rake +277 -0
  68. data/tasks/extension.rake +28 -202
  69. data/tasks/this.rb +209 -0
  70. metadata +102 -191
  71. data/README.rdoc +0 -54
  72. data/gemspec.rb +0 -63
  73. data/lib/amalgalite/1.8/amalgalite3.so +0 -0
  74. data/lib/amalgalite/1.9/amalgalite3.so +0 -0
  75. data/tasks/announce.rake +0 -44
  76. data/tasks/config.rb +0 -107
  77. data/tasks/distribution.rake +0 -77
  78. data/tasks/documentation.rake +0 -36
  79. data/tasks/rspec.rake +0 -30
  80. data/tasks/utils.rb +0 -80
@@ -36,7 +36,6 @@ module Amalgalite
36
36
  # Version of SQLite that ships with Amalgalite
37
37
  VERSION = Version.to_s.freeze
38
38
  end
39
- Version.freeze
40
39
  end
41
40
 
42
41
  unless Amalgalite::SQLite3::Version.compiled_matches_runtime? then
@@ -103,9 +103,10 @@ module Amalgalite
103
103
  end
104
104
  ensure
105
105
  s = $!
106
- begin
106
+ begin
107
107
  reset_for_next_execute!
108
- rescue => e
108
+ rescue
109
+ # rescuing nothing on purpose
109
110
  end
110
111
  raise s if s != s_before
111
112
  end
@@ -343,9 +344,10 @@ module Amalgalite
343
344
  column_meta.schema = ::Amalgalite::Column.new( db_name, tbl_name, col_name, idx )
344
345
  column_meta.schema.declared_data_type = @stmt_api.column_declared_type( idx )
345
346
 
346
- # only check for rowid if we have a table name and it is not the
347
- # sqlite_master table. We could get recursion in those cases.
348
- if not using_rowid_column? and tbl_name and tbl_name != 'sqlite_master' and is_column_rowid?( tbl_name, col_name ) then
347
+ # only check for rowid if we have a table name and it is not one of the
348
+ # sqlite_master tables. We could get recursion in those cases.
349
+ if not using_rowid_column? and tbl_name and
350
+ not %w[ sqlite_master sqlite_temp_master].include?( tbl_name ) and is_column_rowid?( tbl_name, col_name ) then
349
351
  @rowid_index = idx
350
352
  end
351
353
 
@@ -5,7 +5,7 @@
5
5
  require 'set'
6
6
  module Amalgalite
7
7
  #
8
- # a class representing the meta information about an SQLite table
8
+ # a class representing the meta information about an SQLite table
9
9
  #
10
10
  class Table
11
11
  # the schema object the table is associated with
@@ -25,19 +25,20 @@ module Amalgalite
25
25
  # in this table. keys are the column names
26
26
  attr_accessor :columns
27
27
 
28
- def initialize( name, sql = nil )
29
- @name = name
30
- @sql = sql
31
- @indexes = {}
32
- @columns = {}
28
+ def initialize( name, sql = nil )
29
+ @name = name
30
+ @sql = sql
31
+ @indexes = {}
32
+ @columns = {}
33
+ @schema = nil
34
+ @primary_key = nil
33
35
  end
34
36
 
35
37
  # Is the table a temporary table or not
36
38
  def temporary?
37
- !sql
39
+ schema.temporary?
38
40
  end
39
41
 
40
-
41
42
  # the Columns in original definition order
42
43
  def columns_in_order
43
44
  @columns.values.sort_by { |c| c.order }
@@ -3,7 +3,6 @@
3
3
  # All rights reserved. See LICENSE and/or COPYING for details.
4
4
  #++
5
5
 
6
- require 'amalgalite/type_map'
7
6
  require 'time'
8
7
  require 'date'
9
8
 
@@ -3,8 +3,6 @@
3
3
  # All rights reserved. See LICENSE and/or COPYING for details.
4
4
  #++
5
5
 
6
- require 'amalgalite/type_map'
7
-
8
6
  module Amalgalite::TypeMaps
9
7
  ##
10
8
  # An Amalagliate TypeMap that has a one-to-one conversion between SQLite types
@@ -3,7 +3,6 @@
3
3
  # All rights reserved. See LICENSE and/or COPYING for details.
4
4
  #++
5
5
  #
6
- require 'amalgalite/type_map'
7
6
 
8
7
  module Amalgalite::TypeMaps
9
8
  ##
@@ -1,37 +1,8 @@
1
1
  #--
2
2
  # Copyright (c) 2008 Jeremy Hinegardner
3
- # All rights reserved. See LICENSE and/or COPYING for licensingn details
3
+ # All rights reserved. See LICENSE and/or COPYING for licensing details
4
4
  #++
5
5
 
6
6
  module Amalgalite
7
- # Version information for Amagalite
8
- module Version
9
-
10
- MAJOR = 1
11
- MINOR = 1
12
- BUILD = 2
13
-
14
- #
15
- # return the Version as an array of MAJOR, MINOR, BUILD
16
- #
17
- def self.to_a
18
- [MAJOR, MINOR, BUILD]
19
- end
20
-
21
- # return the Version as a dotted String MAJOR.MINOR.BUILD
22
- def self.to_s
23
- to_a.join(".")
24
- end
25
-
26
- # return the Vesion as a hash
27
- def self.to_hash
28
- { :major => MAJOR, :minor => MINOR, :build => BUILD }
29
- end
30
-
31
- # Version string constant
32
- STRING = Version.to_s.freeze
33
- end
34
-
35
- # Version string constant
36
- VERSION = Version.to_s.freeze
37
- end
7
+ VERSION = "1.3.0"
8
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path( File.join( File.dirname( __FILE__ ), "spec_helper.rb" ) )
1
+ require 'spec_helper'
2
2
 
3
3
  class AggregateTest1 < ::Amalgalite::Aggregate
4
4
  def initialize
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
1
+ require 'spec_helper'
2
2
 
3
3
  describe Amalgalite do
4
4
  end
data/spec/blob_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path( File.join( File.dirname(__FILE__), 'spec_helper'))
1
+ require 'spec_helper'
2
2
 
3
3
  describe Amalgalite::Blob do
4
4
 
data/spec/boolean_spec.rb CHANGED
@@ -1,4 +1,5 @@
1
- $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
1
+ require 'spec_helper'
2
+
2
3
  require 'amalgalite'
3
4
  require 'amalgalite/boolean'
4
5
 
data/spec/busy_handler.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper.rb' ) )
1
+ require 'spec_helper'
2
2
 
3
3
  class BusyHandlerTest < Amalgalite::BusyHandler
4
4
  attr_accessor :call_count
@@ -1,6 +1,6 @@
1
- require File.expand_path( File.join( File.dirname(__FILE__), 'spec_helper'))
1
+ require 'spec_helper'
2
2
 
3
- $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
3
+ require 'thread'
4
4
  require 'amalgalite'
5
5
  require 'amalgalite/taps/io'
6
6
  require 'amalgalite/taps/console'
@@ -222,7 +222,7 @@ describe Amalgalite::Database do
222
222
  db.in_transaction?.should eql(true)
223
223
  raise "testing rollback"
224
224
  end
225
- rescue => e
225
+ rescue
226
226
  @iso_db.in_transaction?.should eql(false)
227
227
  @iso_db.execute("SELECT count(1) as cnt FROM country").first['cnt'].should eql(242)
228
228
  end
@@ -260,23 +260,23 @@ describe Amalgalite::Database do
260
260
 
261
261
  describe "#define_function" do
262
262
  it "does not allow mixing of arbitrary and mandatory arguments to an SQL function" do
263
- class FunctionTest2 < ::Amalgalite::Function
263
+ class DBFunctionTest2 < ::Amalgalite::Function
264
264
  def initialize
265
265
  super( 'ftest2', -2 )
266
266
  end
267
267
  def call( a, *args ); end
268
268
  end
269
- lambda { @iso_db.define_function("ftest2", FunctionTest2.new ) }.should raise_error( ::Amalgalite::Database::FunctionError )
269
+ lambda { @iso_db.define_function("ftest2", DBFunctionTest2.new ) }.should raise_error( ::Amalgalite::Database::FunctionError )
270
270
  end
271
271
 
272
272
  it "does not allow outrageous arity" do
273
- class FunctionTest3 < ::Amalgalite::Function
273
+ class DBFunctionTest3 < ::Amalgalite::Function
274
274
  def initialize
275
275
  super( 'ftest3', 128 )
276
276
  end
277
277
  def call( *args) ; end
278
278
  end
279
- lambda { @iso_db.define_function("ftest3", FunctionTest3.new ) }.should raise_error( ::Amalgalite::SQLite3::Error )
279
+ lambda { @iso_db.define_function("ftest3", DBFunctionTest3.new ) }.should raise_error( ::Amalgalite::SQLite3::Error )
280
280
  end
281
281
 
282
282
  end
@@ -364,7 +364,7 @@ describe Amalgalite::Database do
364
364
  end
365
365
 
366
366
  rudeness = Thread.new( @iso_db ) do |db|
367
- sent = control_queue.deq
367
+ control_queue.deq
368
368
  count = 0
369
369
  loop do
370
370
  @iso_db.interrupt!
@@ -410,13 +410,12 @@ describe Amalgalite::Database do
410
410
  end
411
411
 
412
412
  it "rolls back a savepoint" do
413
- all_sub = @iso_db.execute("SELECT count(*) as cnt from subcountry").first['cnt']
414
413
  us_sub = @iso_db.execute("SELECT count(*) as cnt from subcountry where country = 'US'").first['cnt']
415
414
  lambda {
416
415
  @iso_db.savepoint( "t1" ) do |s|
417
416
  s.execute("DELETE FROM subcountry where country = 'US'")
418
417
  as = @iso_db.execute("SELECT count(*) as cnt from subcountry where country = 'US'").first['cnt']
419
- as.should == 0
418
+ as.should be == 0
420
419
  raise "sample error"
421
420
  end
422
421
  }.should raise_error( StandardError, /sample error/ )
@@ -494,7 +493,7 @@ describe Amalgalite::Database do
494
493
  @iso_db.replicate_to( fdb )
495
494
  @iso_db.close
496
495
 
497
- File.exist?( SpecInfo.test_db ).should == true
496
+ File.exist?( SpecInfo.test_db ).should be == true
498
497
  fdb.execute("SELECT count(*) as cnt from subcountry").first['cnt'].should == all_sub
499
498
  end
500
499
 
@@ -502,4 +501,10 @@ describe Amalgalite::Database do
502
501
  lambda { @iso_db.replicate_to( false ) }.should raise_error( ArgumentError, /must be a String or a Database/ )
503
502
  end
504
503
 
504
+ it "imports batch statements" do
505
+ db = Amalgalite::Database.new(":memory:")
506
+ db.import("CREATE TABLE things(stuff TEXT); INSERT INTO things (stuff) VALUES (\"foobar\");").should be_true
507
+ db.first_value_from("SELECT stuff FROM things").should == "foobar"
508
+ end
509
+
505
510
  end
@@ -1,4 +1,4 @@
1
- $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
1
+ require 'spec_helper'
2
2
  require 'amalgalite/type_maps/default_map'
3
3
 
4
4
  describe Amalgalite::TypeMaps::DefaultMap do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
1
+ require 'spec_helper'
2
2
 
3
3
  describe "Scalar SQL Functions" do
4
4
 
@@ -1,4 +1,5 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
1
+ require 'spec_helper'
2
+
2
3
  require 'date'
3
4
  require 'time'
4
5
 
data/spec/packer_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
1
+ require 'spec_helper'
2
+
2
3
  require 'amalgalite/packer'
3
- require 'gemspec'
4
4
 
5
5
  describe "Amalgalite::Packer" do
6
6
  before( :each ) do
@@ -51,8 +51,8 @@ describe "Amalgalite::Packer" do
51
51
 
52
52
  it "has all the lib files in the amalgalite gem" do
53
53
  ro = Amalgalite::Packer.amalgalite_require_order
54
- glist = Amalgalite::GEM_SPEC.files.select { |l| l.index("lib/amalgalite") == 0 }
55
- glist.map! { |l| l.sub("lib/","") }
54
+ glist = IO.readlines("Manifest.txt").select { |l| l.index("lib/amalgalite") == 0 }
55
+ glist.map! { |l| l.strip.sub("lib/","") }
56
56
  (glist - ro).each do |l|
57
57
  l.should_not =~ /amalgalite/
58
58
  end
data/spec/paths_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
1
+ require 'spec_helper'
2
2
 
3
3
  describe Amalgalite::Paths do
4
4
  before(:each) do
@@ -1,4 +1,4 @@
1
- require File.expand_path( File.join( File.dirname( __FILE__ ), "spec_helper.rb" ) )
1
+ require 'spec_helper'
2
2
 
3
3
  class PH < ::Amalgalite::ProgressHandler
4
4
  attr_reader :call_count
@@ -16,12 +16,11 @@ class PH < ::Amalgalite::ProgressHandler
16
16
  end
17
17
  end
18
18
 
19
- def query_thread( db )
20
- Thread.new( db ) do |db|
19
+ def query_thread( database )
20
+ Thread.new( database ) do |db|
21
21
  begin
22
22
  db.execute("select count(id) from country")
23
23
  rescue => e
24
- had_error = e
25
24
  Thread.current[:exception] = e
26
25
  end
27
26
  end
@@ -69,7 +68,7 @@ describe "Progress Handlers" do
69
68
  qt.join
70
69
  ph.call_count.should eql(25)
71
70
  qt[:exception].should be_instance_of( ::Amalgalite::SQLite3::Error )
72
- @iso_db.api.last_error_code.should == 9
71
+ @iso_db.api.last_error_code.should be == 9
73
72
  @iso_db.api.last_error_message.should =~ /interrupted/
74
73
  qt[:exception].message.should =~ /interrupted/
75
74
  end
@@ -1,5 +1,5 @@
1
- $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
2
- #require 'amalgalite/requires'
1
+ require 'spec_helper'
2
+ require 'amalgalite/requires'
3
3
 
4
4
  #describe Amalgalite::Requires do
5
5
  # it "#require_order has all files in 'lib' and no more" do
@@ -18,3 +18,37 @@ $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
18
18
  #end
19
19
 
20
20
 
21
+ describe Amalgalite::Requires do
22
+ it "can import to an in-memory database" do
23
+ sql = <<-SQL
24
+ CREATE TABLE rubylibs (
25
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
26
+ filename TEXT UNIQUE,
27
+ compressed BOOLEAN,
28
+ contents BLOB
29
+ );
30
+ INSERT INTO "rubylibs" VALUES(1, "application", "false", 'A=1');
31
+ SQL
32
+ r = Amalgalite::Requires.new(:dbfile_name => ":memory:")
33
+ r.import(sql)
34
+ r.file_contents( "application" ).should == "A=1"
35
+ end
36
+
37
+
38
+ it "gives equal instances for file databases" do
39
+ a = Amalgalite::Requires.new( :dbfile_name => SpecInfo.test_db )
40
+ b = Amalgalite::Requires.new( :dbfile_name => SpecInfo.test_db )
41
+
42
+ a.db_connection.should equal( b.db_connection )
43
+ end
44
+
45
+
46
+ it "gives separate instances for in-memory databases" do
47
+ a = Amalgalite::Requires.new( :dbfile_name => ":memory:" )
48
+ b = Amalgalite::Requires.new( :dbfile_name => ":memory:" )
49
+
50
+ a.db_connection.should_not equal(b.db_connection)
51
+ end
52
+
53
+
54
+ end
data/spec/rtree_spec.rb CHANGED
@@ -1,4 +1,5 @@
1
- require File.expand_path( File.join( File.dirname(__FILE__), 'spec_helper'))
1
+ require 'spec_helper'
2
+
2
3
  #
3
4
  # Example from http://sqlite.org/rtree.html
4
5
  #
@@ -37,9 +38,9 @@ describe "SQLite3 R*Tree extension" do
37
38
 
38
39
  it "queries normally" do
39
40
  r = @db.execute "SELECT * FROM demo_index WHERE id=1;"
40
- r.size.should == 1
41
+ r.size.should be == 1
41
42
  row = r.first
42
- row['id'].should == 1
43
+ row['id'].should be == 1
43
44
  end
44
45
 
45
46
  it "does a 'contained within' query" do
@@ -49,8 +50,8 @@ describe "SQLite3 R*Tree extension" do
49
50
  AND minY>=30.00 AND maxY<=30.44;
50
51
  sql
51
52
 
52
- r.size.should == 1
53
- r.first['id'].should == 1
53
+ r.size.should be == 1
54
+ r.first['id'].should be == 1
54
55
  end
55
56
 
56
57
  it "does an 'overlapping' query" do
data/spec/schema_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path( File.join( File.dirname(__FILE__), 'spec_helper'))
1
+ require 'spec_helper'
2
2
 
3
3
  require 'amalgalite'
4
4
  require 'amalgalite/schema'
@@ -15,7 +15,7 @@ describe Amalgalite::Schema do
15
15
  s = @iso_db.schema
16
16
  sql = "CREATE VIEW v1 AS SELECT c.name, c.two_letter, s.name, s.subdivision FROM country AS c JOIN subcountry AS s ON c.two_letter = s.country"
17
17
  @iso_db.execute( sql )
18
- s.dirty?.should == true
18
+ s.dirty?.should be == true
19
19
  @iso_db.schema.load_views
20
20
  @iso_db.schema.views.size.should eql(1)
21
21
  @iso_db.schema.views["v1"].sql.should eql(sql)
@@ -25,9 +25,9 @@ describe Amalgalite::Schema do
25
25
  s = @iso_db.schema
26
26
  sql = "CREATE TABLE t1( d1 default 't' )"
27
27
  @iso_db.execute( sql )
28
- s.dirty?.should == true
28
+ s.dirty?.should be == true
29
29
  tt = @iso_db.schema.tables['t1']
30
- tt.columns['d1'].default_value.should == "t"
30
+ tt.columns['d1'].default_value.should be == "t"
31
31
  end
32
32
 
33
33
  it "loads the tables and columns" do
@@ -56,23 +56,22 @@ describe Amalgalite::Schema do
56
56
  s = @iso_db.schema
57
57
  sql = "CREATE TABLE u( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , other text )"
58
58
  @iso_db.execute( sql )
59
- s.dirty?.should == true
59
+ s.dirty?.should be == true
60
60
  ut = @iso_db.schema.tables['u']
61
61
  ut.primary_key.should == [ ut.columns['id'] ]
62
62
  end
63
63
 
64
64
  it "knows the primary key of a temporary table" do
65
65
  @iso_db.execute "CREATE TEMPORARY TABLE tt( a, b INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, c )"
66
- tt = @iso_db.schema.load_table( 'tt' )
66
+ tt = @iso_db.schema.tables[ 'tt' ]
67
67
  tt.primary_key.should == [ tt.columns['b'] ]
68
-
69
68
  end
70
69
 
71
70
  it "knows what the primary key of a table is when it is a multiple column primary key" do
72
71
  sql = "CREATE TABLE m ( id1, id2, PRIMARY KEY (id2, id1) )"
73
72
  s = @iso_db.schema
74
73
  @iso_db.execute( sql )
75
- s.dirty?.should == true
74
+ s.dirty?.should be == true
76
75
  mt = @iso_db.schema.tables['m']
77
76
  mt.primary_key.should == [ mt.columns['id2'], mt.columns['id1'] ]
78
77
  end
@@ -93,31 +92,40 @@ describe Amalgalite::Schema do
93
92
 
94
93
  it "knows the schema is dirty when a table is created" do
95
94
  s = @iso_db.schema
96
- c = s.tables['country']
97
- s.dirty?.should == false
95
+ s.tables['country']
96
+ s.dirty?.should be == false
98
97
  @iso_db.execute( "create table x1( a, b )" )
99
- s.dirty?.should == true
98
+ s.dirty?.should be == true
100
99
  end
101
100
 
102
101
  it "knows the schema is dirty when a table is dropped" do
103
102
  s = @iso_db.schema
104
- c = s.tables['country']
103
+ s.tables['country']
105
104
  @iso_db.execute( "create table x1( a, b )" )
106
- s.dirty?.should == true
105
+ s.dirty?.should be == true
107
106
 
108
107
  @iso_db.schema.load_schema!
109
108
  s = @iso_db.schema
110
109
 
111
- s.dirty?.should == false
110
+ s.dirty?.should be == false
112
111
  @iso_db.execute("drop table x1")
113
- s.dirty?.should == true
112
+ s.dirty?.should be == true
114
113
  end
115
114
 
115
+ it "knows if a temporary table exists" do
116
+ @iso_db.execute "CREATE TEMPORARY TABLE tt(a,b,c)"
117
+ @iso_db.schema.tables.keys.include?('tt').should be == true
118
+ @iso_db.schema.tables['tt'].temporary?.should be == true
119
+ end
116
120
 
117
- it "can load the schema of a temporary table" do
118
- @iso_db.execute "CREATE TEMPORARY TABLE tt( a, b, c )"
119
- @iso_db.schema.tables['tt'].should be_nil
120
- @iso_db.schema.load_table('tt').should_not be_nil
121
- @iso_db.schema.tables['tt'].should be_temporary
121
+ it "sees that temporary tables shadow real tables" do
122
+ @iso_db.execute "CREATE TABLE tt(x)"
123
+ @iso_db.schema.tables['tt'].temporary?.should be == false
124
+ @iso_db.execute "CREATE TEMP TABLE tt(a,b,c)"
125
+ @iso_db.schema.tables['tt'].temporary?.should be == true
126
+ @iso_db.execute "DROP TABLE tt"
127
+ @iso_db.schema.tables['tt'].temporary?.should be == false
128
+ @iso_db.schema.tables['tt'].columns.size.should be == 1
122
129
  end
130
+
123
131
  end