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 187 def case_expression_sql_append(sql, ce) 188 super(sql, ce.with_merged_expression) 189 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 194 def cast_sql_append(sql, expr, type) 195 if type == String 196 sql << "RTRIM(" 197 super 198 sql << ')' 199 else 200 super 201 end 202 end
Sequel::Dataset#complex_expression_sql_append
# File lib/sequel/adapters/jdbc/derby.rb 204 def complex_expression_sql_append(sql, op, args) 205 case op 206 when :%, :'B~' 207 complex_expression_emulate_append(sql, op, args) 208 when :&, :|, :^, :<<, :>> 209 raise Error, "Derby doesn't support the #{op} operator" 210 when :** 211 sql << 'exp(' 212 literal_append(sql, args[1]) 213 sql << ' * ln(' 214 literal_append(sql, args[0]) 215 sql << "))" 216 when :extract 217 sql << args[0].to_s << '(' 218 literal_append(sql, args[1]) 219 sql << ')' 220 else 221 super 222 end 223 end
Derby
supports GROUP BY ROLLUP (but not CUBE)
# File lib/sequel/adapters/jdbc/derby.rb 226 def supports_group_rollup? 227 true 228 end
Derby
does not support IS TRUE.
# File lib/sequel/adapters/jdbc/derby.rb 231 def supports_is_true? 232 false 233 end
Derby
does not support IN/NOT IN with multiple columns
# File lib/sequel/adapters/jdbc/derby.rb 236 def supports_multiple_column_in? 237 false 238 end
Private Instance Methods
# File lib/sequel/adapters/jdbc/derby.rb 242 def empty_from_sql 243 " FROM sysibm.sysdummy1" 244 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 253 def insert_supports_empty_values? 254 false 255 end
Derby
needs a hex string casted to BLOB for blobs.
# File lib/sequel/adapters/jdbc/derby.rb 247 def literal_blob_append(sql, v) 248 sql << "CAST(X'" << v.unpack("H*").first << "' AS BLOB)" 249 end
Newer Derby
versions can use the FALSE literal, but older versions need an always false expression.
# File lib/sequel/adapters/jdbc/derby.rb 258 def literal_false 259 if db.svn_version >= 1040133 260 'FALSE' 261 else 262 '(1 = 0)' 263 end 264 end
Derby
handles fractional seconds in timestamps, but not in times
# File lib/sequel/adapters/jdbc/derby.rb 267 def literal_sqltime(v) 268 v.strftime("'%H:%M:%S'") 269 end
Newer Derby
versions can use the TRUE literal, but older versions need an always false expression.
# File lib/sequel/adapters/jdbc/derby.rb 272 def literal_true 273 if db.svn_version >= 1040133 274 'TRUE' 275 else 276 '(1 = 1)' 277 end 278 end
Derby
supports multiple rows for VALUES in INSERT.
# File lib/sequel/adapters/jdbc/derby.rb 281 def multi_insert_sql_strategy 282 :values 283 end
Emulate the char_length function with length
Sequel::Dataset#native_function_name
# File lib/sequel/adapters/jdbc/derby.rb 286 def native_function_name(emulated_function) 287 if emulated_function == :char_length 288 'length' 289 else 290 super 291 end 292 end
Offset comes before limit in Derby
# File lib/sequel/adapters/jdbc/derby.rb 295 def select_limit_sql(sql) 296 if o = @opts[:offset] 297 sql << " OFFSET " 298 literal_append(sql, o) 299 sql << " ROWS" 300 end 301 if l = @opts[:limit] 302 sql << " FETCH FIRST " 303 literal_append(sql, l) 304 sql << " ROWS ONLY" 305 end 306 end