Class: DataMapper::Adapters::PostgresqlAdapter::Mappings::Table

Inherits:
Object
  • Object
show all
Defined in:
lib/data_mapper/adapters/postgresql_adapter.rb

Instance Method Summary collapse

Instance Method Details

#sequence_sqlObject



65
66
67
# File 'lib/data_mapper/adapters/postgresql_adapter.rb', line 65

def sequence_sql
  @sequence_sql ||= quote_table("_id_seq").freeze
end

#to_create_table_sqlObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/data_mapper/adapters/postgresql_adapter.rb', line 69

def to_create_table_sql
  schema_name = name.index('.') ? name.split('.').first : nil
  schema_list = @adapter.query('SELECT nspname FROM pg_namespace').join(',')

  sql = if schema_name and !schema_list.include?(schema_name)
      "CREATE SCHEMA #{@adapter.quote_table_name(schema_name)}; " 
  else
    ''
  end
  
  sql << "CREATE TABLE " << to_sql

  sql << " (" << columns.map do |column|
    column.to_long_form
  end.join(', ') << ")"

  return sql
end

#unquote_default(default) ⇒ Object

The logic of this comes from AR; it was modified for smarter typecasting



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/data_mapper/adapters/postgresql_adapter.rb', line 89

def unquote_default(default)
  # Boolean types
  return true if default =~ /true/i
  return false if default =~ /false/i

  # Char/String/Bytea type values
  return $1 if default =~ /^'(.*)'::(bpchar|text|character varying|bytea)$/

  # Numeric values
  return value.to_f if default =~ /^-?[0-9]+(\.[0-9]*)/
  return value.to_i if default =~ /^-?[0-9]+/

  # Fixed dates / times
  return Date.parse($1) if default =~ /^'(.+)'::date/
  return DateTime.parse($1) if default =~ /^'(.+)'::timestamp/            

  # Anything else is blank, some user type, or some function
  # and we can't know the value of that, so return nil.
  return nil       
end