Class: Lafcadio::CreateTableStatement
- Inherits:
-
Object
- Object
- Lafcadio::CreateTableStatement
- Defined in:
- lib/lafcadio/schema/CreateTableStatement.rb
Overview
:nodoc:
Instance Method Summary collapse
-
#initialize(domainClass) ⇒ CreateTableStatement
constructor
A new instance of CreateTableStatement.
- #toSql ⇒ Object
- #typeClause(field) ⇒ Object
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
#toSql ⇒ Object
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 |