Skip to content

Commit

Permalink
push SQL generation inside the schema creation object
Browse files Browse the repository at this point in the history
  • Loading branch information
tenderlove committed Mar 22, 2013
1 parent a80bcc3 commit 14d7dc0
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,16 @@ class TableDefinition
# An array of ColumnDefinition objects, representing the column changes
# that have been defined.
attr_accessor :columns, :indexes
attr_reader :name, :temporary, :options

def initialize(types)
def initialize(types, name, temporary, options)
@columns = []
@columns_hash = {}
@indexes = {}
@native = types
@temporary = temporary
@options = options
@name = name
end

# Appends a primary key definition to the table definition.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ def column_exists?(table_name, column_name, type = nil, options = {})
#
# See also TableDefinition#column for details on how to create columns.
def create_table(table_name, options = {})
td = create_table_definition
td = create_table_definition table_name, options[:temporary], options[:options]

unless options[:id] == false
pk = options.fetch(:primary_key) {
Expand All @@ -187,11 +187,7 @@ def create_table(table_name, options = {})
drop_table(table_name, options)
end

create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
create_sql << "#{quote_table_name(table_name)} ("
create_sql << schema_creation.accept(td)
create_sql << ") #{options[:options]}"
execute create_sql
execute schema_creation.accept td
td.indexes.each_pair { |c,o| add_index table_name, c, o }
end

Expand Down Expand Up @@ -829,8 +825,8 @@ def rename_column_indexes(table_name, column_name, new_column_name)
end

private
def create_table_definition
TableDefinition.new native_database_types
def create_table_definition(name, temporary, options)
TableDefinition.new native_database_types, name, temporary, options
end

def update_table_definition(table_name, base)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,21 @@ def visit_ColumnDefinition(o)
end

def visit_TableDefinition(o)
o.columns.map { |c| accept c }.join ', '
create_sql = "CREATE#{' TEMPORARY' if o.temporary} TABLE "
create_sql << "#{quote_table_name(o.name)} ("
create_sql << o.columns.map { |c| accept c }.join(', ')
create_sql << ") #{o.options}"
create_sql
end

def quote_column_name(name)
@conn.quote_column_name name
end

def quote_table_name(name)
@conn.quote_table_name name
end

def type_to_sql(type, limit, precision, scale)
@conn.type_to_sql type.to_sym, limit, precision, scale
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -900,8 +900,8 @@ def extract_table_ref_from_insert_sql(sql)
$1.strip if $1
end

def create_table_definition
TableDefinition.new native_database_types
def create_table_definition(name, temporary, options)
TableDefinition.new native_database_types, name, temporary, options
end

def update_table_definition(table_name, base)
Expand Down

0 comments on commit 14d7dc0

Please sign in to comment.