class Sequel::JDBC::Derby::Dataset
Public Instance Methods
Derby
doesn’t support an expression between CASE and WHEN, so remove conditions.
Sequel::Dataset#case_expression_sql_append
# File lib/sequel/adapters/jdbc/derby.rb 190 def case_expression_sql_append(sql, ce) 191 super(sql, ce.with_merged_expression) 192 end
If the type is String
, trim the extra spaces since CHAR is used instead of varchar. This can cause problems if you are casting a char/varchar to a string and the ending whitespace is important.
Sequel::Dataset#cast_sql_append
# File lib/sequel/adapters/jdbc/derby.rb 197 def cast_sql_append(sql, expr, type) 198 if type == String 199 sql << "RTRIM(" 200 super 201 sql << ')' 202 else 203 super 204 end 205 end
Sequel::Dataset#complex_expression_sql_append
# File lib/sequel/adapters/jdbc/derby.rb 207 def complex_expression_sql_append(sql, op, args) 208 case op 209 when :%, :'B~' 210 complex_expression_emulate_append(sql, op, args) 211 when :&, :|, :^, :<<, :>> 212 raise Error, "Derby doesn't support the #{op} operator" 213 when :** 214 sql << 'exp(' 215 literal_append(sql, args[1]) 216 sql << ' * ln(' 217 literal_append(sql, args[0]) 218 sql << "))" 219 when :extract 220 sql << args[0].to_s << '(' 221 literal_append(sql, args[1]) 222 sql << ')' 223 else 224 super 225 end 226 end
Derby
supports GROUP BY ROLLUP (but not CUBE)
# File lib/sequel/adapters/jdbc/derby.rb 229 def supports_group_rollup? 230 true 231 end
Derby
does not support IS TRUE.
# File lib/sequel/adapters/jdbc/derby.rb 234 def supports_is_true? 235 false 236 end
Derby
does not support IN/NOT IN with multiple columns
# File lib/sequel/adapters/jdbc/derby.rb 239 def supports_multiple_column_in? 240 false 241 end
Private Instance Methods
# File lib/sequel/adapters/jdbc/derby.rb 245 def empty_from_sql 246 " FROM sysibm.sysdummy1" 247 end
Derby
needs the standard workaround to insert all default values into a table with more than one column.
# File lib/sequel/adapters/jdbc/derby.rb 256 def insert_supports_empty_values? 257 false 258 end
Derby
needs a hex string casted to BLOB for blobs.
# File lib/sequel/adapters/jdbc/derby.rb 250 def literal_blob_append(sql, v) 251 sql << "CAST(X'" << v.unpack("H*").first << "' AS BLOB)" 252 end
Newer Derby
versions can use the FALSE literal, but older versions need an always false expression.
# File lib/sequel/adapters/jdbc/derby.rb 261 def literal_false 262 if db.svn_version >= 1040133 263 'FALSE' 264 else 265 '(1 = 0)' 266 end 267 end
Derby
handles fractional seconds in timestamps, but not in times
# File lib/sequel/adapters/jdbc/derby.rb 270 def literal_sqltime(v) 271 v.strftime("'%H:%M:%S'") 272 end
Newer Derby
versions can use the TRUE literal, but older versions need an always false expression.
# File lib/sequel/adapters/jdbc/derby.rb 275 def literal_true 276 if db.svn_version >= 1040133 277 'TRUE' 278 else 279 '(1 = 1)' 280 end 281 end
Derby
supports multiple rows for VALUES in INSERT.
# File lib/sequel/adapters/jdbc/derby.rb 284 def multi_insert_sql_strategy 285 :values 286 end
Emulate the char_length function with length
Sequel::Dataset#native_function_name
# File lib/sequel/adapters/jdbc/derby.rb 289 def native_function_name(emulated_function) 290 if emulated_function == :char_length 291 'length' 292 else 293 super 294 end 295 end
Offset comes before limit in Derby
# File lib/sequel/adapters/jdbc/derby.rb 298 def select_limit_sql(sql) 299 if o = @opts[:offset] 300 sql << " OFFSET " 301 literal_append(sql, o) 302 sql << " ROWS" 303 end 304 if l = @opts[:limit] 305 sql << " FETCH FIRST " 306 literal_append(sql, l) 307 sql << " ROWS ONLY" 308 end 309 end