module Sequel::SqlAnywhere::DatabaseMethods

  1. lib/sequel/adapters/shared/sqlanywhere.rb
Parent: SqlAnywhere

Constants

AUTO_INCREMENT = 'IDENTITY'.freeze  
DATABASE_ERROR_REGEXPS = { /would not be unique/ => Sequel::UniqueConstraintViolation, /Column .* in table .* cannot be NULL/ => Sequel::NotNullConstraintViolation, /Constraint .* violated: Invalid value in table .*/ => Sequel::CheckConstraintViolation, /No primary key value for foreign key .* in table .*/ => Sequel::ForeignKeyConstraintViolation, /Primary key for row in table .* is referenced by foreign key .* in table .*/ => Sequel::ForeignKeyConstraintViolation }.freeze  
DECIMAL_TYPE_RE = /numeric/io  
SMALLINT_RE = /smallint/i.freeze  
SQL_BEGIN = "BEGIN TRANSACTION".freeze  
SQL_COMMIT = "COMMIT TRANSACTION".freeze  
SQL_ROLLBACK = "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION".freeze  
TEMPORARY = "GLOBAL TEMPORARY ".freeze  

Attributes

conversion_procs [R]
convert_smallint_to_bool [W]

Override the default Sequel::SqlAnywhere.convert_smallint_to_bool setting for this database.

Public Instance methods

convert_smallint_to_bool ()

Whether to convert smallint to boolean arguments for this dataset. Defaults to the SqlAnywhere module setting.

[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 30
def convert_smallint_to_bool
  defined?(@convert_smallint_to_bool) ? @convert_smallint_to_bool : (@convert_smallint_to_bool = ::Sequel::SqlAnywhere.convert_smallint_to_bool)
end
database_type ()

Sysbase Server uses the :sqlanywhere type.

[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 35
def database_type
  :sqlanywhere
end
foreign_key_list (table, opts=OPTS)
[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 91
def foreign_key_list(table, opts=OPTS)
  m = output_identifier_meth
  im = input_identifier_meth
  fk_indexes = {}
  metadata_dataset.
   from(:sys__sysforeignkey___fk).
   select(:fk__role___name, :fks__columns___column_map, :si__indextype___type, :si__colnames___columns, :fks__primary_tname___table_name).
   join(:sys__sysforeignkeys___fks, :role => :role).
   join_table(:inner, :sys__sysindexes___si, [:iname=> :fk__role], {:implicit_qualifier => :fk}).
   where(:fks__foreign_tname=>im.call(table)).
   each do |r|
    unless r[:type].downcase == 'primary key'
      fk_indexes[r[:name]] =
        {:name=>m.call(r[:name]),
         :columns=>r[:columns].split(',').map{|v| m.call(v.split(' ').first)},
         :table=>m.call(r[:table_name]),
         :key=>r[:column_map].split(',').map{|v| m.call(v.split(' IS ').last)}}
     end
  end
  fk_indexes.values
end
indexes (table, opts = OPTS)
[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 73
def indexes(table, opts = OPTS)
  m = output_identifier_meth
  im = input_identifier_meth
  indexes = {}
  metadata_dataset.
   from(:dbo__sysobjects___z).
   select(:z__name___table_name, :i__name___index_name, :si__indextype___type, :si__colnames___columns).
   join(:dbo__sysindexes___i, :id___i=> :id___z).
   join(:sys__sysindexes___si, :iname=> :name___i).
   where(:z__type => 'U', :table_name=>im.call(table)).
   each do |r|
    indexes[m.call(r[:index_name])] =
      {:unique=>(r[:type].downcase=='unique'),
       :columns=>r[:columns].split(',').map{|v| m.call(v.split(' ').first)}} unless r[:type].downcase == 'primary key'
  end
  indexes
end
schema_column_type (db_type)

Convert smallint type to boolean if #convert_smallint_to_bool is true

[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 44
def schema_column_type(db_type)
  if convert_smallint_to_bool && db_type =~ SMALLINT_RE
    :boolean
  else
    super
  end
end
schema_parse_table (table, opts)
[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 52
def schema_parse_table(table, opts)
  m = output_identifier_meth(opts[:dataset])
  im = input_identifier_meth(opts[:dataset])
  metadata_dataset.
   from{sa_describe_query("select * from #{im.call(table)}").as(:a)}.
   join(:syscolumn___b, :table_id=>:base_table_id, :column_id=>:base_column_id).
   order(:a__column_number).
    map do |row|
    row[:auto_increment] = row.delete(:is_autoincrement) == 1
    row[:primary_key] = row.delete(:pkey) == 'Y'
    row[:allow_null] = row[:nulls_allowed].is_a?(Fixnum) ? row.delete(:nulls_allowed) == 1 : row.delete(:nulls_allowed)
    row[:db_type] = row.delete(:domain_name)
    row[:type] = if row[:db_type] =~ DECIMAL_TYPE_RE and (row[:scale].is_a?(Fixnum) ? row[:scale] == 0 : !row[:scale])
      :integer
    else
      schema_column_type(row[:db_type])
    end
    [m.call(row.delete(:name)), row]
  end
end
tables (opts=OPTS)
[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 113
def tables(opts=OPTS)
  tables_and_views('U', opts)
end
to_application_timestamp_sa (v)
[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 39
def to_application_timestamp_sa(v)
  to_application_timestamp(v.to_s) if v
end
views (opts=OPTS)
[show source]
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 117
def views(opts=OPTS)
  tables_and_views('V', opts)
end