odbc-rails 1.2 → 1.3

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.
data/ChangeLog CHANGED
@@ -1,3 +1,11 @@
1
+ 2007-01-09 10:18 source
2
+
3
+ * Updated version number to 1.3
4
+
5
+ 2007-01-09 10:11 source
6
+
7
+ * Added support for PostgreSQL
8
+
1
9
  2006-12-11 12:01 source
2
10
 
3
11
  * Updated for final release 1.2
data/NEWS CHANGED
@@ -1,3 +1,6 @@
1
+ January 9, 2007, V1.3:
2
+ * Added support for PostgreSQL
3
+
1
4
  December 11, 2006, V1.2:
2
5
  * Added option to install adapter as a gem
3
6
  * Added option to install adapter as a plugin
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  (C) 2006 OpenLink Software
4
4
 
5
- 11-December-2006
5
+ 09-Jan-2007
6
6
 
7
7
 
8
8
  == Status
@@ -18,7 +18,7 @@ its own adapter.
18
18
  It currently supports Ingres r3, Informix 9.3 or later, Oracle 10g,
19
19
  MySQL 5 and OpenLink's Virtuoso
20
20
  (Open Source Edition[http://virtuoso.openlinksw.com]),
21
- SQL Server 2000, Sybase ASE 15, DB2 v9 and Progress v8/9/10
21
+ SQL Server 2000, Sybase ASE 15, DB2 v9, Progress v8/9/10 and PostgreSQL 8.2.
22
22
 
23
23
  Testing to date has been limited to the ROR 'Expenses' sample
24
24
  application described at http://developer.apple.com/tools/rubyonrails.html
@@ -100,12 +100,11 @@ Install the odbc-rails gem by running:
100
100
  Enable loading of the adapter by editing your Rails project's
101
101
  config/environment.rb script:
102
102
 
103
- * Add a <tt>require</tt> to your config/environment.rb immediately after
104
- the line
103
+ * Add a +require+ to your config/environment.rb immediately after the line
105
104
 
106
105
  require File.join(File.dirname(__FILE__), 'boot')
107
106
 
108
- i.e.
107
+ i.e.
109
108
 
110
109
  require File.join(File.dirname(__FILE__), 'boot')
111
110
  require 'odbc_adapter'
@@ -1,5 +1,5 @@
1
1
  #
2
- # $Id: odbc_adapter.rb,v 1.2 2006/12/11 12:00:10 source Exp $
2
+ # $Id: odbc_adapter.rb,v 1.3 2007/01/09 10:11:40 source Exp $
3
3
  #
4
4
  # OpenLink ODBC Adapter for Ruby on Rails
5
5
  # Copyright (C) 2006 OpenLink Software
@@ -57,12 +57,12 @@ begin
57
57
  # The ODBC adapter requires the Ruby ODBC module (version 0.9991 or
58
58
  # later), available from http://raa.ruby-lang.org/project/ruby-odbc
59
59
  #
60
- # == Status at 11-Dec-2006
60
+ # == Status at 09-Jan-2007
61
61
  #
62
62
  # The current adapter supports Ingres r3, Informix 9.3 or later,
63
63
  # Virtuoso (Open-Source Edition) 4.5, Oracle 10g, MySQL 5,
64
- # SQL Server 2000, Sybase ASE 15, DB2 v9, Progress 9/10 (SQL-92 engine)
65
- # and Progress 8 (SQL-89 engine).
64
+ # SQL Server 2000, Sybase ASE 15, DB2 v9, Progress 9/10 (SQL-92 engine),
65
+ # Progress 8 (SQL-89 engine) and PostgreSQL 8.2
66
66
  #
67
67
  # == Testing Environments
68
68
  #
@@ -71,7 +71,8 @@ begin
71
71
  # The iODBC Driver Manager was used on Linux and Mac OS X.
72
72
  #
73
73
  # Databases supported using OpenLink ODBC drivers:
74
- # * Informix, Ingres, Oracle, MySQL, SQL Server, Sybase, DB2, Progress
74
+ # * Informix, Ingres, Oracle, MySQL, SQL Server, Sybase, DB2, Progress,
75
+ # PostgreSQL
75
76
  # Databases supported using the database's own native ODBC driver:
76
77
  # * Virtuoso, MySQL, Informix
77
78
  #
@@ -85,7 +86,6 @@ begin
85
86
  # More information can be found at:
86
87
  # * http://rubyforge.org/projects/odbc-rails/
87
88
  # * http://odbc-rails.openlinksw.com
88
- # * http://virtuoso.openlinksw.com/wiki/main/OdbcRails/RailsAdapterWeb
89
89
  # * http://sourceforge.net/projects/virtuoso/
90
90
  #
91
91
  # Maintainer: Carl Blakeley (mailto:cblakeley@openlinksw.co.uk)
@@ -253,6 +253,15 @@ begin
253
253
  :supports_count_distinct => true
254
254
  }
255
255
  },
256
+ :postgresql => {
257
+ :any_version => {
258
+ :primary_key => "serial primary key",
259
+ :has_autoincrement_col => true,
260
+ :supports_migrations => true,
261
+ :supports_schema_names => false,
262
+ :supports_count_distinct => true
263
+ }
264
+ },
256
265
  :progress => {
257
266
  :any_version => {
258
267
  :primary_key => "integer not null primary key",
@@ -497,8 +506,8 @@ begin
497
506
  @logger.unknown("args=[#{value}]") if @@trace
498
507
  case value
499
508
  when String
500
- if column && column.type == :binary && column.class.respond_to?(:string_to_binary)
501
- "'#{quote_string(column.class.string_to_binary(value))}'"
509
+ if column && column.type == :binary && self.respond_to?(:string_to_binary)
510
+ "'#{string_to_binary(value)}'"
502
511
  elsif (column && [:integer, :float].include?(column.type)) ||
503
512
  (column.nil? && @convert_numeric_literals &&
504
513
  (value =~ /^[-+]?[0-9]+[.]?[0-9]*([eE][-+]?[0-9]+)?$/))
@@ -864,9 +873,9 @@ begin
864
873
  # Returns the default sequence name for a table.
865
874
  # Used for databases which don't support an autoincrementing column
866
875
  # type, but do support sequences.
867
- def default_sequence_name(table, primary_key=nil)
876
+ def default_sequence_name(table, column)
868
877
  @logger.unknown("ODBCAdapter#default_sequence_name>") if @@trace
869
- @logger.unknown("args=[#{table}|#{primary_key}]") if @@trace
878
+ @logger.unknown("args=[#{table}|#{column}]") if @@trace
870
879
  "#{table}_seq"
871
880
  end
872
881
 
@@ -915,11 +924,15 @@ begin
915
924
  currentUser = @dsInfo.info[ODBC::SQL_USER_NAME]
916
925
  stmt = @connection.tables
917
926
  resultSet = stmt.fetch_all || []
918
- resultSet.each do |row|
927
+ resultSet.each do |row|
928
+ schemaName = row[1]
929
+ tblName = row[2]
930
+ tblType = row[3]
931
+ next if respond_to?("table_filter") && table_filter(schemaName, tblName, tblType)
919
932
  if @@dbmsLookups.get_info(@dbmsName, @dbmsMajorVer, :supports_schema_names)
920
- tblNames << activeRecIdentCase(row[2]) if row[1].casecmp(currentUser) == 0
933
+ tblNames << activeRecIdentCase(tblName) if schemaName.casecmp(currentUser) == 0
921
934
  else
922
- tblNames << activeRecIdentCase(row[2])
935
+ tblNames << activeRecIdentCase(tblName)
923
936
  end
924
937
  end
925
938
  stmt.drop
@@ -966,8 +979,9 @@ begin
966
979
  elsif colDefault =~ /^\((.*)\)$/ # SQL Server numeric default
967
980
  colDefault = $1
968
981
  # ODBC drivers should return string column defaults in quotes
969
- # Oracle also includes a trailing space.
970
- elsif colDefault =~ /^'(.*)' *$/
982
+ # - Oracle includes a trailing space.
983
+ # - PostgreSQL may return '<default>::character varying'
984
+ elsif colDefault =~ /^'(.*)'[ :].*$/
971
985
  colDefault = $1
972
986
  #TODO: HACKS for Progress
973
987
  elsif @dbmsName == :progress || @dbmsName == :progress89
@@ -1,5 +1,5 @@
1
1
  #
2
- # $Id: odbcext_postgresql.rb,v 1.1 2006/12/06 14:42:11 source Exp $
2
+ # $Id: odbcext_postgresql.rb,v 1.2 2007/01/09 10:11:40 source Exp $
3
3
  #
4
4
  # OpenLink ODBC Adapter for Ruby on Rails
5
5
  # Copyright (C) 2006 OpenLink Software
@@ -32,15 +32,22 @@ module ODBCExt
32
32
 
33
33
  # #last_insert_id must be implemented for any database which returns
34
34
  # false from #prefetch_primary_key?
35
-
36
- #def last_insert_id(table, sequence_name, stmt = nil)
37
- #end
35
+
36
+ def last_insert_id(table, sequence_name, stmt = nil)
37
+ select_value("select currval('#{sequence_name}')", 'last_insert_id')
38
+ end
38
39
 
39
40
  # ------------------------------------------------------------------------
40
41
  # Optional methods
41
42
  #
42
43
  # These are supplied for a DBMS only if necessary.
43
44
  # ODBCAdapter tests for optional methods using Object#respond_to?
45
+
46
+ # Filter for ODBCAdapter#tables
47
+ # Omits table from #tables if table_filter returns true
48
+ def table_filter(schemaName, tblName, tblType)
49
+ ["information_schema", "pg_catalog"].include?(schemaName) || tblType !~ /TABLE/i
50
+ end
44
51
 
45
52
  # Pre action for ODBCAdapter#insert
46
53
  # def pre_insert(sql, name, pk, id_value, sequence_name)
@@ -50,22 +57,45 @@ module ODBCExt
50
57
  # def post_insert(sql, name, pk, id_value, sequence_name)
51
58
  # end
52
59
 
60
+ def string_to_binary(value)
61
+ # Escape data prior to insert into a bytea column
62
+ if value
63
+ res = ''
64
+ value.each_byte { |b| res << sprintf('\\\\%03o', b) }
65
+ res
66
+ end
67
+ end
68
+
53
69
  # ------------------------------------------------------------------------
54
70
  # Method redefinitions
55
71
  #
56
72
  # DBMS specific methods which override the default implementation
57
73
  # provided by the ODBCAdapter core.
58
74
 
59
- def default_sequence_name(table, primary_key=nil)
60
- @logger.unknown("ODBCAdapter#default_sequence_name>") if @trace
61
- #@logger.unknown("args=[#{table}|#{primary_key}]") if @trace
62
- default_pk, default_seq = pk_and_sequence_for(table)
63
- default_seq || "#{table}_#{primary_key || default_pk || 'id'}_seq"
64
- rescue Exception => e
65
- @logger.unknown("exception=#{e}") if @trace
66
- raise
75
+ def quoted_true
76
+ "'t'"
77
+ end
78
+
79
+ def quoted_false
80
+ "'f'"
81
+ end
82
+
83
+ def quote_string(string)
84
+ @logger.unknown("ODBCAdapter#quote_string>") if @trace
85
+ string.gsub(/\\/, '\&\&').gsub(/'/, "''")
67
86
  end
68
87
 
88
+ def default_sequence_name(table, column)
89
+ @logger.unknown("ODBCAdapter#default_sequence_name>") if @trace
90
+ @logger.unknown("args=[#{table}|#{column}]") if @trace
91
+ "#{table}_#{column}_seq"
92
+ end
93
+
94
+ def indexes(table_name, name = nil)
95
+ # Exclude primary key indexes
96
+ super(table_name, name).delete_if { |i| i.unique && i.name =~ /_pkey$/i }
97
+ end
98
+
69
99
  def rename_table(name, new_name)
70
100
  @logger.unknown("ODBCAdapter#rename_table>") if @trace
71
101
  execute "ALTER TABLE #{name} RENAME TO #{new_name}"
@@ -91,7 +121,7 @@ module ODBCExt
91
121
 
92
122
  def change_column(table_name, column_name, type, options = {})
93
123
  @logger.unknown("ODBCAdapter#change_column>") if @trace
94
- execute "ALTER TABLE #{table_name} ALTER #{column_name} TYPE #{type}"
124
+ execute "ALTER TABLE #{table_name} ALTER #{column_name} TYPE #{type_to_sql(type, options[:limit])}"
95
125
  change_column_default(table_name, column_name, options[:default]) unless options[:default].nil?
96
126
  rescue Exception => e
97
127
  @logger.unknown("exception=#{e}") if @trace
@@ -108,7 +138,7 @@ module ODBCExt
108
138
 
109
139
  def rename_column(table_name, column_name, new_column_name)
110
140
  @logger.unknown("ODBCAdapter#rename_column>") if @trace
111
- execute "ALTER TABLE #{table_name} RENAME COLUMN #{column_name} TO #{new_column_name}"
141
+ execute "ALTER TABLE #{table_name} RENAME #{column_name} TO #{new_column_name}"
112
142
  rescue Exception => e
113
143
  @logger.unknown("exception=#{e}") if @trace
114
144
  raise
@@ -116,64 +146,10 @@ module ODBCExt
116
146
 
117
147
  def remove_index(table_name, options = {})
118
148
  @logger.unknown("ODBCAdapter#remove_index>") if @trace
119
- if Hash === options
120
- index_name = options[:name]
121
- else
122
- index_name = "#{table_name}_#{options}_index"
123
- end
124
- execute "DROP INDEX #{index_name}"
149
+ execute "DROP INDEX #{index_name(table_name, options)}"
125
150
  rescue Exception => e
126
151
  @logger.unknown("exception=#{e}") if @trace
127
152
  raise
128
153
  end
129
154
 
130
- # ------------------------------------------------------------------------
131
- # Private methods to support methods above
132
- #
133
- private
134
-
135
- # Find a table's primary key and sequence.
136
- def pk_and_sequence_for(table)
137
- # First try looking for a sequence with a dependency on the
138
- # given table's primary key.
139
- result = select_all(<<-end_sql, 'PK and serial sequence')[0]
140
- SELECT attr.attname, name.nspname, seq.relname
141
- FROM pg_class seq,
142
- pg_attribute attr,
143
- pg_depend dep,
144
- pg_namespace name,
145
- pg_constraint cons
146
- WHERE seq.oid = dep.objid
147
- AND seq.relnamespace = name.oid
148
- AND seq.relkind = 'S'
149
- AND attr.attrelid = dep.refobjid
150
- AND attr.attnum = dep.refobjsubid
151
- AND attr.attrelid = cons.conrelid
152
- AND attr.attnum = cons.conkey[1]
153
- AND cons.contype = 'p'
154
- AND dep.refobjid = '#{table}'::regclass
155
- end_sql
156
-
157
- if result.nil? or result.empty?
158
- # If that fails, try parsing the primary key's default value.
159
- # Support the 7.x and 8.0 nextval('foo'::text) as well as
160
- # the 8.1+ nextval('foo'::regclass).
161
- result = select_all(<<-end_sql, 'PK and custom sequence')[0]
162
- SELECT attr.attname, name.nspname, split_part(def.adsrc, '\\\'', 2)
163
- FROM pg_class t
164
- JOIN pg_namespace name ON (t.relnamespace = name.oid)
165
- JOIN pg_attribute attr ON (t.oid = attrelid)
166
- JOIN pg_attrdef def ON (adrelid = attrelid AND adnum = attnum)
167
- JOIN pg_constraint cons ON (conrelid = adrelid AND adnum = conkey[1])
168
- WHERE t.oid = '#{table}'::regclass
169
- AND cons.contype = 'p'
170
- AND def.adsrc ~* 'nextval'
171
- end_sql
172
- end
173
- # check for existence of . in sequence name as in public.foo_sequence. if it does not exist, join the current namespace
174
- result.last['.'] ? [result.first, result.last] : [result.first, "#{result[1]}.#{result[2]}"]
175
- rescue
176
- nil
177
- end
178
-
179
155
  end # module
@@ -985,7 +985,7 @@ class BasicsTest < Test::Unit::TestCase
985
985
 
986
986
  def test_quote
987
987
  if current_adapter?(:ODBCAdapter) && [:informix, :sybase].include?(ActiveRecord::Base.connection.dbmsName)
988
- #Informix and Sybase only allow printable characters in VARCHAR columns.
988
+ #Some databases only allow printable characters in VARCHAR columns.
989
989
  author_name = "\\ \041 ' \n \\n \""
990
990
  else
991
991
  author_name = "\\ \001 ' \n \\n \""
@@ -247,7 +247,7 @@ if ActiveRecord::Base.connection.supports_migrations?
247
247
 
248
248
  begin
249
249
  # Some DBs complain girlfriend column already exists on two consecutive add_column calls
250
- unless current_adapter?(:ODBCAdapter) && [:informix, :oracle, :mysql, :microsoftsqlserver, :sybase].include?(ActiveRecord::Base.connection.dbmsName)
250
+ unless current_adapter?(:ODBCAdapter) && [:informix, :oracle, :mysql, :microsoftsqlserver, :sybase, :postgresql].include?(ActiveRecord::Base.connection.dbmsName)
251
251
  Person.connection.add_column "people", "girlfriend", :string
252
252
  end
253
253
  Person.connection.add_column "people", "girlfriend", :string, :limit => 40
@@ -0,0 +1,34 @@
1
+ DROP SEQUENCE accounts_id_seq;
2
+ DROP TABLE accounts;
3
+ DROP TABLE funny_jokes;
4
+ DROP TABLE companies;
5
+ DROP SEQUENCE companies_nonstd_seq;
6
+ DROP TABLE topics;
7
+ DROP TABLE developers;
8
+ DROP TABLE projects;
9
+ DROP TABLE developers_projects;
10
+ DROP TABLE customers;
11
+ DROP TABLE orders;
12
+ DROP TABLE movies;
13
+ DROP TABLE subscribers;
14
+ DROP TABLE booleantests;
15
+ DROP TABLE auto_id_tests;
16
+ DROP TABLE entrants;
17
+ DROP TABLE colnametests;
18
+ DROP TABLE mixins;
19
+ DROP TABLE people;
20
+ DROP TABLE readers;
21
+ DROP TABLE binaries;
22
+ DROP TABLE computers;
23
+ DROP TABLE posts;
24
+ DROP TABLE comments;
25
+ DROP TABLE authors;
26
+ DROP TABLE tasks;
27
+ DROP TABLE categories;
28
+ DROP TABLE categories_posts;
29
+ DROP TABLE defaults;
30
+ DROP TABLE fk_test_has_fk;
31
+ DROP TABLE fk_test_has_pk;
32
+ DROP TABLE geometrics;
33
+ DROP TABLE keyboards;
34
+ DROP TABLE legacy_things;
@@ -0,0 +1,248 @@
1
+ CREATE SEQUENCE public.accounts_id_seq START 100;
2
+
3
+ CREATE TABLE accounts (
4
+ id integer DEFAULT nextval('public.accounts_id_seq'),
5
+ firm_id integer,
6
+ credit_limit integer,
7
+ PRIMARY KEY (id)
8
+ );
9
+
10
+ CREATE TABLE funny_jokes (
11
+ id serial,
12
+ name character varying(50)
13
+ );
14
+
15
+ CREATE SEQUENCE companies_nonstd_seq START 101;
16
+
17
+ CREATE TABLE companies (
18
+ id integer DEFAULT nextval('companies_nonstd_seq'),
19
+ "type" character varying(50),
20
+ "ruby_type" character varying(50),
21
+ firm_id integer,
22
+ name character varying(50),
23
+ client_of integer,
24
+ rating integer default 1,
25
+ PRIMARY KEY (id)
26
+ );
27
+
28
+ CREATE TABLE developers_projects (
29
+ developer_id integer NOT NULL,
30
+ project_id integer NOT NULL,
31
+ joined_on date,
32
+ access_level integer default 1
33
+ );
34
+
35
+ CREATE TABLE developers (
36
+ id serial,
37
+ name character varying(100),
38
+ salary integer DEFAULT 70000,
39
+ created_at timestamp,
40
+ updated_at timestamp,
41
+ PRIMARY KEY (id)
42
+ );
43
+ SELECT setval('developers_id_seq', 100);
44
+
45
+ CREATE TABLE projects (
46
+ id serial,
47
+ name character varying(100),
48
+ type varchar(255),
49
+ PRIMARY KEY (id)
50
+ );
51
+ SELECT setval('projects_id_seq', 100);
52
+
53
+ CREATE TABLE topics (
54
+ id serial,
55
+ title character varying(255),
56
+ author_name character varying(255),
57
+ author_email_address character varying(255),
58
+ written_on timestamp without time zone,
59
+ bonus_time time,
60
+ last_read date,
61
+ content text,
62
+ approved boolean default true,
63
+ replies_count integer default 0,
64
+ parent_id integer,
65
+ "type" character varying(50),
66
+ PRIMARY KEY (id)
67
+ );
68
+ SELECT setval('topics_id_seq', 100);
69
+
70
+ CREATE TABLE customers (
71
+ id serial,
72
+ name character varying,
73
+ balance integer default 0,
74
+ address_street character varying,
75
+ address_city character varying,
76
+ address_country character varying,
77
+ gps_location character varying,
78
+ PRIMARY KEY (id)
79
+ );
80
+ SELECT setval('customers_id_seq', 100);
81
+
82
+ CREATE TABLE orders (
83
+ id serial,
84
+ name character varying,
85
+ billing_customer_id integer,
86
+ shipping_customer_id integer,
87
+ PRIMARY KEY (id)
88
+ );
89
+ SELECT setval('orders_id_seq', 100);
90
+
91
+ CREATE TABLE movies (
92
+ movieid serial,
93
+ name text,
94
+ PRIMARY KEY (movieid)
95
+ );
96
+
97
+ CREATE TABLE subscribers (
98
+ nick text NOT NULL,
99
+ name text,
100
+ PRIMARY KEY (nick)
101
+ );
102
+
103
+ CREATE TABLE booleantests (
104
+ id serial,
105
+ value boolean,
106
+ PRIMARY KEY (id)
107
+ );
108
+
109
+ CREATE TABLE defaults (
110
+ id serial,
111
+ modified_date date default CURRENT_DATE,
112
+ modified_date_function date default now(),
113
+ fixed_date date default '2004-01-01',
114
+ modified_time timestamp default CURRENT_TIMESTAMP,
115
+ modified_time_function timestamp default now(),
116
+ fixed_time timestamp default '2004-01-01 00:00:00.000000-00',
117
+ char1 char(1) default 'Y',
118
+ char2 character varying(50) default 'a varchar field',
119
+ char3 text default 'a text field',
120
+ positive_integer integer default 1,
121
+ negative_integer integer default -1
122
+ );
123
+
124
+ CREATE TABLE auto_id_tests (
125
+ auto_id serial,
126
+ value integer,
127
+ PRIMARY KEY (auto_id)
128
+ );
129
+
130
+ CREATE TABLE entrants (
131
+ id serial,
132
+ name text,
133
+ course_id integer
134
+ );
135
+
136
+ CREATE TABLE colnametests (
137
+ id serial,
138
+ "references" integer NOT NULL
139
+ );
140
+
141
+ CREATE TABLE mixins (
142
+ id serial,
143
+ parent_id integer,
144
+ type character varying,
145
+ pos integer,
146
+ lft integer,
147
+ rgt integer,
148
+ root_id integer,
149
+ created_at timestamp,
150
+ updated_at timestamp,
151
+ PRIMARY KEY (id)
152
+ );
153
+
154
+ CREATE TABLE people (
155
+ id serial,
156
+ first_name text,
157
+ lock_version integer default 0,
158
+ PRIMARY KEY (id)
159
+ );
160
+
161
+ CREATE TABLE readers (
162
+ id serial,
163
+ post_id integer NOT NULL,
164
+ person_id integer NOT NULL,
165
+ primary key (id)
166
+ );
167
+
168
+ CREATE TABLE binaries (
169
+ id serial ,
170
+ data bytea,
171
+ PRIMARY KEY (id)
172
+ );
173
+
174
+ CREATE TABLE computers (
175
+ id serial,
176
+ developer integer NOT NULL,
177
+ "extendedWarranty" integer NOT NULL
178
+ );
179
+
180
+ CREATE TABLE posts (
181
+ id serial,
182
+ author_id integer,
183
+ title varchar(255),
184
+ type varchar(255),
185
+ body text
186
+ );
187
+
188
+ CREATE TABLE comments (
189
+ id serial,
190
+ post_id integer,
191
+ type varchar(255),
192
+ body text
193
+ );
194
+
195
+ CREATE TABLE authors (
196
+ id serial,
197
+ name varchar(255) default NULL
198
+ );
199
+
200
+ CREATE TABLE tasks (
201
+ id serial,
202
+ starting timestamp,
203
+ ending timestamp,
204
+ PRIMARY KEY (id)
205
+ );
206
+
207
+ CREATE TABLE categories (
208
+ id serial,
209
+ name varchar(255),
210
+ type varchar(255)
211
+ );
212
+
213
+ CREATE TABLE categories_posts (
214
+ category_id integer NOT NULL,
215
+ post_id integer NOT NULL
216
+ );
217
+
218
+ CREATE TABLE fk_test_has_pk (
219
+ id INTEGER NOT NULL PRIMARY KEY
220
+ );
221
+
222
+ CREATE TABLE fk_test_has_fk (
223
+ id INTEGER NOT NULL PRIMARY KEY,
224
+ fk_id INTEGER NOT NULL REFERENCES fk_test_has_fk(id)
225
+ );
226
+
227
+ CREATE TABLE geometrics (
228
+ id serial primary key,
229
+ a_point point,
230
+ -- a_line line, (the line type is currently not implemented in postgresql)
231
+ a_line_segment lseg,
232
+ a_box box,
233
+ a_path path,
234
+ a_polygon polygon,
235
+ a_circle circle
236
+ );
237
+
238
+ CREATE TABLE keyboards (
239
+ key_number serial primary key,
240
+ "name" character varying(50)
241
+ );
242
+
243
+ --Altered lock_version column name.
244
+ CREATE TABLE legacy_things (
245
+ id serial primary key,
246
+ tps_report_number integer,
247
+ version integer default 0
248
+ );
@@ -0,0 +1,2 @@
1
+ DROP TABLE courses;
2
+
@@ -0,0 +1,5 @@
1
+ CREATE TABLE courses (
2
+ id serial,
3
+ name text
4
+ );
5
+
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: odbc-rails
5
5
  version: !ruby/object:Gem::Version
6
- version: "1.2"
7
- date: 2006-12-11 00:00:00 +01:00
6
+ version: "1.3"
7
+ date: 2007-01-09 00:00:00 +01:00
8
8
  summary: ODBC Data Adapter for ActiveRecord.
9
9
  require_paths:
10
10
  - lib
@@ -73,6 +73,10 @@ files:
73
73
  - test/fixtures/db_definitions/oracle_odbc.sql
74
74
  - test/fixtures/db_definitions/oracle_odbc2.drop.sql
75
75
  - test/fixtures/db_definitions/oracle_odbc2.sql
76
+ - test/fixtures/db_definitions/postgresql.drop.sql
77
+ - test/fixtures/db_definitions/postgresql.sql
78
+ - test/fixtures/db_definitions/postgresql2.drop.sql
79
+ - test/fixtures/db_definitions/postgresql2.sql
76
80
  - test/fixtures/db_definitions/progress.drop.sql
77
81
  - test/fixtures/db_definitions/progress.sql
78
82
  - test/fixtures/db_definitions/progress2.drop.sql