hypersonic 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/Hypersonic.rb +225 -0
  2. data/lib/hsqldb.jar +0 -0
  3. metadata +46 -0
data/lib/Hypersonic.rb ADDED
@@ -0,0 +1,225 @@
1
+ require 'yajb/jbridge'
2
+ include JavaBridge
3
+
4
+ class Hypersonic
5
+
6
+ jimport "java.sql.*"
7
+ jimport "org.hsqldb.*"
8
+
9
+ def initialize
10
+ class_instance = jstatic Class
11
+ class_instance.forName("org.hsqldb.jdbcDriver" )
12
+
13
+ @driver_manager = jstatic :DriverManager
14
+ # lets reset these variables to ensure there's not leftover data
15
+ @conn = nil
16
+ @statement = nil
17
+ @rs = nil
18
+ @rows_affected = 0
19
+ @sql_data_types = nil
20
+ @column_names = nil
21
+ @java_data_types = nil
22
+ @data_sizes = nil
23
+ end
24
+
25
+ def connect (connect_string = nil, user=nil, password=nil)
26
+ # I've established some sane defaults, mainly for testing
27
+ if(connect_string == nil) then
28
+ connect_string = "jdbc:hsqldb:file:testdb"
29
+ end
30
+ if(user == nil) then
31
+ user = "sa"
32
+ end
33
+ if(password == nil) then
34
+ password = ""
35
+ end
36
+ @conn = @driver_manager.getConnection(connect_string, user, password)
37
+ @statement = @conn.createStatement
38
+ end
39
+
40
+ def execute_update (sql)
41
+ # use this for insert, update, drop, and insert
42
+ @rows_affected = @statement.executeUpdate(sql)
43
+ end
44
+
45
+ def execute_query (sql)
46
+ # use this for insert, update, drop, and insert
47
+ @rs = @statement.executeQuery(sql)
48
+ ret_val = convert_result_set
49
+ end
50
+
51
+ def disconnect
52
+ if(@conn) then
53
+ @conn.close
54
+ end
55
+ @driver_manager = nil
56
+ @conn=nil
57
+ @statement=nil
58
+ @rs=nil
59
+ end
60
+
61
+ def convert_result_set
62
+ convert_this_result_set @rs
63
+ end
64
+
65
+ def convert_this_result_set rs
66
+ meta = rs.getMetaData
67
+ column_count = meta.getColumnCount
68
+ # question: can I ask the metadata for the row count?
69
+ row_count = 0
70
+ ruby_result_set = []
71
+ @sql_data_types = []
72
+ @column_names = []
73
+ @java_data_types = []
74
+ @data_sizes = []
75
+
76
+ while(rs.next) do
77
+ row_count = row_count + 1
78
+ x = 0
79
+ this_row = []
80
+ while( x < column_count ) do
81
+ x = x + 1
82
+ o = rs.getObject(x)
83
+
84
+ # should I convert this to a string or convert it properly here?
85
+ # I think that ActiveRecord does it's own conversion in the adapter
86
+ # Double check this... -jrr
87
+
88
+ value = o.to_s
89
+ name = meta.getColumnName(x)
90
+ this_row.push(value)
91
+
92
+ # I only want to extract data types and column names on the first row
93
+ if(@sql_data_types.length < column_count) then
94
+
95
+ int_type = meta.getColumnType(x)
96
+ data_type = convert_sql_data_type_to_string(int_type)
97
+ @sql_data_types.push(data_type)
98
+
99
+ @java_data_types.push(meta.getColumnClassName(x))
100
+ @column_names.push(meta.getColumnName(x))
101
+ @data_sizes.push(meta.getColumnDisplaySize(x))
102
+ end
103
+ end
104
+ #puts this_row
105
+ ruby_result_set.push(this_row)
106
+ end
107
+ ruby_result_set
108
+ end
109
+
110
+ def get_column_name (index)
111
+ @rs.getColumnName(index)
112
+ end
113
+
114
+ def get_column_type_name(index)
115
+ @rs.getColumnTypeName(index)
116
+ end
117
+
118
+ def get_rows_affected
119
+ @rows_affected
120
+ end
121
+
122
+ def get_table_name
123
+ if(@rs) then
124
+ @rs.getMetaData.getTableName
125
+ else
126
+ nil
127
+ end
128
+ end
129
+
130
+ def tables
131
+ table_list = @conn.getMetaData.getTables(nil, nil, nil, ["TABLE"])
132
+ rs = convert_this_result_set table_list
133
+ rs[0]
134
+ end
135
+
136
+ def current_database
137
+ cdb = @rs.getMetaData.getTableName(1)
138
+ cdb
139
+ end
140
+
141
+ def java_data_types
142
+ @java_data_types
143
+ end
144
+
145
+ def data_types
146
+ # return the list of data types contained in the current result set
147
+ @sql_data_types
148
+ end
149
+
150
+ def column_names
151
+ @column_names
152
+ end
153
+
154
+ def data_sizes
155
+ @data_sizes
156
+ end
157
+
158
+ def convert_sql_data_type_to_string int_type
159
+ # these data types are SQL type from java.sql.Types
160
+ type = jstatic "java.sql.Types"
161
+ ret_val = nil
162
+
163
+ case int_type
164
+ when type.ARRAY
165
+ ret_val = "ARRAY"
166
+ when type.BIGINT
167
+ ret_val = "BIGINT"
168
+ when type.BINARY
169
+ ret_val = "BINARY"
170
+ when type.BIT
171
+ ret_val = "BIT"
172
+ when type.BLOB
173
+ ret_val = "BLOB"
174
+ when type.BOOLEAN
175
+ ret_val = "BOOLEAN"
176
+ when type.CHAR
177
+ ret_val = "CHAR"
178
+ when type.CLOB
179
+ ret_val = "CLOB"
180
+ when type.DATALINK
181
+ ret_val = "DATALINK"
182
+ when type.DATE
183
+ ret_val = "DATE"
184
+ when type.DECIMAL
185
+ ret_val = "DECIMAL"
186
+ when type.DISTINCT
187
+ ret_val = "DISTINCT"
188
+ when type.DOUBLE
189
+ ret_val = "DOUBLE"
190
+ when type.FLOAT
191
+ ret_val = "FLOAT"
192
+ when type.INTEGER
193
+ ret_val = "INTEGER"
194
+ when type.JAVA_OBJECT
195
+ ret_val = "JAVA_OBJECT"
196
+ when type.LONGVARBINARY
197
+ ret_val = "LONGVARBINARY"
198
+ when type.NULL
199
+ ret_val = "NULL"
200
+ when type.NUMERIC
201
+ ret_val = "NUMERIC"
202
+ when type.OTHER
203
+ ret_val = "OTHER"
204
+ when type.REAL
205
+ ret_val = "REAL"
206
+ when type.REF
207
+ ret_val = "REF"
208
+ when type.SMALLINT
209
+ ret_val = "SMALLINT"
210
+ when type.STRUCT
211
+ ret_val = "STRUCT"
212
+ when type.TIME
213
+ ret_val = "TIME"
214
+ when type.TIMESTAMP
215
+ ret_val = "TIMESTAMP"
216
+ when type.TINYINT
217
+ ret_val = "TINYINT"
218
+ when type.VARBINARY
219
+ ret_val = "VARBINARY"
220
+ when type.VARCHAR
221
+ ret_val = "VARCHAR"
222
+ end
223
+ ret_val
224
+ end
225
+ end
data/lib/hsqldb.jar ADDED
Binary file
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.11
3
+ specification_version: 1
4
+ name: hypersonic
5
+ version: !ruby/object:Gem::Version
6
+ version: "1.0"
7
+ date: 2006-10-10 00:00:00 -04:00
8
+ summary: hypersonic is a Ruby adapter for the Hypersonic Java database
9
+ require_paths:
10
+ - lib
11
+ email: jared@jaredrichardson.net
12
+ homepage: http://jaredrichardson.net
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: hypersonic
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ authors:
29
+ - Jared Richardson
30
+ files:
31
+ - lib/hsqldb.jar
32
+ - lib/Hypersonic.rb
33
+ test_files: []
34
+
35
+ rdoc_options: []
36
+
37
+ extra_rdoc_files: []
38
+
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ requirements: []
44
+
45
+ dependencies: []
46
+