hypersonic 1.0

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 (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
+