class DBI::DBD::OCI8::Database
def [](attr)
def [](attr) case attr when 'AutoCommit' @handle.autocommit? end end
def []=(attr, value)
def []=(attr, value) case attr when 'AutoCommit' @handle.autocommit = value end end
def columns(table)
def columns(table) tab = @handle.describe_table(table) cols = tab.columns cols.collect! do |col| column_metadata_to_column_info(col) end dbh = DBI::DatabaseHandle.new(self) primaries = {} dbh.select_all(<<EOS, tab.obj_schema, tab.obj_name) do |row| lect column_name from all_cons_columns a, all_constraints b here a.owner = b.owner and a.constraint_name = b.constraint_name and a.table_name = b.table_name and b.constraint_type = 'P' and b.owner = :1 and b.table_name = :2 S primaries[row[0]] = true end indices = {} uniques = {} dbh.select_all(<<EOS, tab.obj_schema, tab.obj_name) do |row| lect a.column_name, a.index_name, b.uniqueness from all_ind_columns a, all_indexes b here a.index_name = b.index_name and a.index_owner = b.owner and a.table_owner = :1 and a.table_name = :2 S col_name, index_name, uniqueness = row indices[col_name] = true uniques[col_name] = true if uniqueness == 'UNIQUE' end dbh.select_all(<<EOS, tab.obj_schema, tab.obj_name).collect do |row| lect column_id, column_name, data_default from all_tab_columns here owner = :1 and table_name = :2 S col_id, col_name, default = row col = cols[col_id.to_i - 1] col_name = col['name'] if default && default[0] == ?' default = default[1..-2].gsub(/''/, "'") end col['indexed'] = indices[col_name] || false col['primary'] = primaries[col_name] || false col['unique'] = uniques[col_name] || false col['default'] = default col end rescue OCIException => err raise_dbierror(err) end
def commit
def commit @handle.commit() rescue OCIException => err raise_dbierror(err) end
def disconnect
def disconnect @handle.logoff rescue OCIException => err raise_dbierror(err) end
def ping
def ping @handle.exec("BEGIN NULL; END;") true rescue false end
def prepare( statement )
def prepare( statement ) # convert ?-style parameters to :1, :2 etc. prep_statement = DBI::SQL::PreparedStatement.new(DummyQuoter.new, statement) if prep_statement.unbound.size > 0 arr = (1..(prep_statement.unbound.size)).collect{|i| ":#{i}"} statement = prep_statement.bind( arr ) end cursor = @handle.parse(statement) Statement.new(cursor) rescue OCIException => err raise_dbierror(err) end
def rollback
def rollback @handle.rollback() rescue OCIException => err raise_dbierror(err) end
def tables
def tables stmt = execute("SELECT object_name FROM user_objects where object_type in ('TABLE', 'VIEW')") rows = stmt.fetch_all || [] stmt.finish rows.collect {|row| row[0]} end