class Sequel::JDBC::HSQLDB::Dataset

def complex_expression_sql_append(sql, op, args)

Handle HSQLDB specific case insensitive LIKE and bitwise operator support.
def complex_expression_sql_append(sql, op, args)
  case op
  when :ILIKE, :"NOT ILIKE"
    super(sql, (op == :ILIKE ? :LIKE : :"NOT LIKE"), args.map{|v| SQL::Function.new(:ucase, v)})
  when :&, :|, :^, :%, :<<, :>>, :'B~'
    complex_expression_emulate_append(sql, op, args)
  else
    super
  end
end

def empty_from_sql

def empty_from_sql
  " FROM (VALUES (0))"
end

def literal_blob_append(sql, v)

Use string in hex format for blob data.
def literal_blob_append(sql, v)
  sql << "X'" << v.unpack("H*").first << "'"
end

def literal_false

HSQLDB uses FALSE for false values.
def literal_false
  'FALSE'
end

def literal_sqltime(v)

HSQLDB handles fractional seconds in timestamps, but not in times
def literal_sqltime(v)
  v.strftime("'%H:%M:%S'")
end

def literal_true

HSQLDB uses TRUE for true values.
def literal_true
  'TRUE'
end

def multi_insert_sql_strategy

HSQLDB supports multiple rows in INSERT.
def multi_insert_sql_strategy
  :values
end

def recursive_cte_requires_column_aliases?

HSQLDB requires recursive CTEs to have column aliases.
def recursive_cte_requires_column_aliases?
  true
end

def requires_sql_standard_datetimes?

HSQLDB requires SQL standard datetimes in some places.
def requires_sql_standard_datetimes?
  true
end

def select_with_sql_base

Use WITH RECURSIVE instead of WITH if any of the CTEs is recursive
def select_with_sql_base
  opts[:with].any?{|w| w[:recursive]} ? "WITH RECURSIVE " : super
end

def supports_cte?(type=:select)

If you want to use CTEs with HSQLDB, you'll have to manually modify the dataset to allow it.
Also, if any CTE is recursive, all CTEs must be recursive.
CTEs in earlier queries might take precedence over CTEs with the same name in later queries.
CTEs operate more like temprorary tables or views, lasting longer than the duration of the expression.
HSQLDB does support common table expressions, but the support is broken.
def supports_cte?(type=:select)
  false
end

def supports_is_true?

HSQLDB does not support IS TRUE.
def supports_is_true?
  false
end

def supports_lateral_subqueries?

HSQLDB supports lateral subqueries.
def supports_lateral_subqueries?
  true
end

def supports_merge?

features that are in Sequel's tests.
HSQLDB 2.3.4+ supports MERGE. Older versions also support MERGE, but not all
def supports_merge?
  db.db_version >= 20304
end