lib/swift/db.rb in swift-0.6.1 vs lib/swift/db.rb in swift-0.7.0
- old
+ new
@@ -17,14 +17,53 @@
def returning?
true
end
- def field_definition attribute
+ def field_type attribute
case attribute
- when Type::IO then '%s bytea' % attribute.field
+ when Type::IO then 'bytea'
else super
end
end
end # Postgres
+
+ class DB2 < Adapter
+ def initialize options = {}
+ super options.update(driver: 'db2')
+ end
+
+ def returning?
+ false
+ end
+
+ def drop_store name
+ exists_sql =<<-SQL
+ select count(*) as exists from syscat.tables where tabschema = CURRENT_SCHEMA and tabname = '#{name.upcase}'
+ SQL
+
+ execute(exists_sql.strip) do |r|
+ execute("drop table #{name}") if r[:exists] > 0
+ end
+ end
+
+ def field_type attribute
+ case attribute
+ when Type::String then 'clob(2g)'
+ when Type::Integer then attribute.serial ? 'integer not null generated by default as identity' : 'integer'
+ when Type::Boolean then 'char(1)'
+ when Type::Float then 'real'
+ when Type::BigDecimal then 'double'
+ else super
+ end
+ end
+
+ def prepare_create scheme
+ prepare_cached(scheme, :create) do
+ values = (['?'] * scheme.header.insertable.size).join(', ')
+ sql = "insert into #{scheme.store} (#{scheme.header.insertable.join(', ')}) values (#{values})"
+ scheme.header.serial ? "select #{scheme.header.serial} from final table (#{sql})" : sql
+ end
+ end
+ end # DB2
end # DB
end # Swift