Class: Lafcadio::CreateTableStatement

Inherits:
Object
  • Object
show all
Defined in:
lib/lafcadio/schema/CreateTableStatement.rb

Overview

:nodoc:

Instance Method Summary collapse

Constructor Details

#initialize(domainClass) ⇒ CreateTableStatement

Returns a new instance of CreateTableStatement.



3
4
5
# File 'lib/lafcadio/schema/CreateTableStatement.rb', line 3

def initialize( domainClass )
	@domainClass = domainClass
end

Instance Method Details

#toSqlObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/lafcadio/schema/CreateTableStatement.rb', line 41

def toSql
	createDefinitions = []
	createDefinitions << "#{ @domainClass.sqlPrimaryKeyName } " +
											 "int not null auto_increment"
	createDefinitions << "primary key (#{ @domainClass.sqlPrimaryKeyName })"
	@domainClass.classFields.each { |field|
		definitionTerms = []
		definitionTerms << field.dbFieldName
		definitionTerms << typeClause( field )
		definitionTerms << 'not null' if field.notNull
		definitionTerms << 'unique' if field.unique
		createDefinitions << definitionTerms.join(' ')
	}
	<<-SQL
	create table #{ @domainClass.tableName } (
#{ createDefinitions.join(",\n  ") }
	);
	SQL
end

#typeClause(field) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/lafcadio/schema/CreateTableStatement.rb', line 7

def typeClause( field )
	require 'lafcadio/objectField/TextField'
	require 'lafcadio/objectField/DecimalField'
	require 'lafcadio/objectField/LinkField'
	require 'lafcadio/objectField/IntegerField'
	require 'lafcadio/objectField/DateField'
	require 'lafcadio/objectField/EnumField'
	require 'lafcadio/objectField/TextListField'
	require 'lafcadio/objectField/BooleanField'
	require 'lafcadio/objectField/DateTimeField'
	if ( field.class <= EnumField )
		singleQuotedValues = field.enums.keys.collect! { |enumValue|
			"'#{ enumValue }'"
		}
		"enum( #{ singleQuotedValues.join( ', ' ) } )"
	elsif ( field.class <= TextField || field.class <= TextListField )
		'varchar(255)'
	elsif field.class <= DecimalField
		"float(10, #{ field.precision })"
	elsif ( field.class <= LinkField || field.class <= IntegerField )
		'int'
	elsif field.class <= DateField
		'date'
	elsif field.class <= BooleanField
		'bool'
	elsif field.class <= TimeStampField
		'timestamp'
	elsif field.class <= DateTimeField
		'datetime'
	elsif field.class <= BlobField
		'blob'
	end
end