Module: ArJdbc::H2
Defined Under Namespace
Modules: Column
Constant Summary
collapse
- ADAPTER_NAME =
'H2'.freeze
- NATIVE_DATABASE_TYPES =
{
:primary_key => "bigint identity",
:boolean => { :name => "boolean" },
:tinyint => { :name => "tinyint", :limit => 1 },
:smallint => { :name => "smallint", :limit => 2 },
:bigint => { :name => "bigint", :limit => 8 },
:integer => { :name => "int", :limit => 4 },
:decimal => { :name => "decimal" }, :numeric => { :name => "numeric" }, :float => { :name => "float", :limit => 8 },
:double => { :name => "double", :limit => 8 },
:real => { :name => "real", :limit => 4 }, :date => { :name => "date" },
:time => { :name => "time" },
:timestamp => { :name => "timestamp" },
:datetime => { :name => "timestamp" },
:binary => { :name => "binary" },
:string => { :name => "varchar", :limit => 255 },
:char => { :name => "char" }, :blob => { :name => "blob" },
:text => { :name => "clob" },
:clob => { :name => "clob" },
:uuid => { :name => "uuid" }, :other => { :name => "other" }, :array => { :name => "array" }, :varchar_casesensitive => { :name => 'varchar_casesensitive' },
:varchar_ignorecase => { :name => 'varchar_ignorecase' },
}
Constants included
from HSQLDB
ArJdbc::HSQLDB::SchemaCreation
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from HSQLDB
#add_column, #add_limit_offset!, #change_column_default, #last_insert_id, #quote_column_name, #quoted_date, #remove_index, #rename_column, #rename_table, #schema_creation, #truncate
Class Method Details
.arel_visitor_type(config = nil) ⇒ Object
76
77
78
|
# File 'lib/arjdbc/h2/adapter.rb', line 76
def self.arel_visitor_type(config = nil)
require 'arel/visitors/h2'; ::Arel::Visitors::H2
end
|
.column_selector ⇒ Object
14
15
16
|
# File 'lib/arjdbc/h2/adapter.rb', line 14
def self.column_selector
[ /\.h2\./i, lambda { |config, column| column.extend(Column) } ]
end
|
.jdbc_connection_class ⇒ Object
Instance Method Details
#adapter_name ⇒ Object
83
84
85
|
# File 'lib/arjdbc/h2/adapter.rb', line 83
def adapter_name
ADAPTER_NAME
end
|
#change_column(table_name, column_name, type, options = {}) ⇒ Object
175
176
177
178
179
|
# File 'lib/arjdbc/h2/adapter.rb', line 175
def change_column(table_name, column_name, type, options = {})
execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} #{type_to_sql(type, options[:limit])}"
change_column_default(table_name, column_name, options[:default]) if options_include_default?(options)
change_column_null(table_name, column_name, options[:null], options[:default]) if options.key?(:null)
end
|
#columns(table_name, name = nil) ⇒ Object
170
171
172
|
# File 'lib/arjdbc/h2/adapter.rb', line 170
def columns(table_name, name = nil)
@connection.columns_internal(table_name.to_s, nil, h2_schema)
end
|
#current_schema ⇒ Object
181
182
183
|
# File 'lib/arjdbc/h2/adapter.rb', line 181
def current_schema
execute('CALL SCHEMA()')[0].values[0]
end
|
#empty_insert_statement_value ⇒ Object
160
161
162
|
# File 'lib/arjdbc/h2/adapter.rb', line 160
def empty_insert_statement_value
"VALUES ()"
end
|
#explain(arel, binds = []) ⇒ Object
208
209
210
211
212
|
# File 'lib/arjdbc/h2/adapter.rb', line 208
def explain(arel, binds = [])
sql = "EXPLAIN #{to_sql(arel, binds)}"
raw_result = exec_query_raw(sql, "EXPLAIN", binds)
raw_result[0].values.join("\n") end
|
#h2_adapter ⇒ Object
Deprecated. no longer used. only here for backwards compatibility with 1.2
88
89
90
|
# File 'lib/arjdbc/h2/adapter.rb', line 88
def h2_adapter
true
end
|
#jdbc_connection(unwrap = nil) ⇒ Object
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
|
# File 'lib/arjdbc/h2/adapter.rb', line 260
def jdbc_connection(unwrap = nil)
java_connection = raw_connection.connection
return java_connection unless unwrap
if java_connection.java_class.name == 'org.h2.jdbc.JdbcConnection'
return java_connection
end
connection_class = java.sql.Connection.java_class
if java_connection.wrapper_for?(connection_class)
java_connection.unwrap(connection_class) elsif java_connection.respond_to?(:connection)
java_connection.connection else
java_connection
end
end
|
#native_database_types ⇒ Object
127
128
129
|
# File 'lib/arjdbc/h2/adapter.rb', line 127
def native_database_types
NATIVE_DATABASE_TYPES
end
|
#quote(value, column = nil) ⇒ Object
186
187
188
189
190
191
192
193
194
195
196
197
|
# File 'lib/arjdbc/h2/adapter.rb', line 186
def quote(value, column = nil)
case value
when String
if value.empty?
"''"
else
super
end
else
super
end
end
|
#shutdown ⇒ Object
230
231
232
|
# File 'lib/arjdbc/h2/adapter.rb', line 230
def shutdown
execute 'SHUTDOWN COMPACT'
end
|
#structure_dump ⇒ Object
215
216
217
218
219
220
221
222
223
|
# File 'lib/arjdbc/h2/adapter.rb', line 215
def structure_dump
execute('SCRIPT SIMPLE').map do |result|
case sql = result.first[1] when /CREATE USER IF NOT EXISTS SA/i then nil
else sql
end
end.compact.join("\n\n")
end
|
#structure_load(dump) ⇒ Object
226
227
228
|
# File 'lib/arjdbc/h2/adapter.rb', line 226
def structure_load(dump)
dump.each_line("\n\n") { |ddl| execute(ddl) }
end
|
#supports_explain? ⇒ Boolean
205
|
# File 'lib/arjdbc/h2/adapter.rb', line 205
def supports_explain?; true end
|
#supports_views? ⇒ Boolean
200
|
# File 'lib/arjdbc/h2/adapter.rb', line 200
def supports_views?; true end
|
#tables ⇒ Object
165
166
167
|
# File 'lib/arjdbc/h2/adapter.rb', line 165
def tables
@connection.tables(nil, h2_schema)
end
|
#type_to_sql(type, limit = nil, precision = nil, scale = nil) ⇒ Object
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
# File 'lib/arjdbc/h2/adapter.rb', line 132
def type_to_sql(type, limit = nil, precision = nil, scale = nil)
case type.to_sym
when :integer
case limit
when 1; 'tinyint'
when 2; 'smallint'
when nil, 3, 4; 'int'
when 5..8; 'bigint'
else raise(ActiveRecordError, "No integer type has byte size #{limit}")
end
when :float
case limit
when 1..4; 'real'
when 5..8; 'double'
else raise(ActiveRecordError, "No float type has byte size #{limit}")
end
when :binary
if limit && limit < 2 * 1024 * 1024
'binary'
else
'blob'
end
else
super
end
end
|