class DbMeta::Oracle::Table
Attributes
cache[R]
columns[R]
duration[R]
iot_type[R]
temporary[R]
Public Class Methods
new(args = {})
click to toggle source
Calls superclass method
DbMeta::Oracle::Base::new
# File lib/db_meta/oracle/types/table.rb, line 8 def initialize(args = {}) super(args) @comment = nil # table level comment @comment = nil @columns = [] @indexes = [] @constraints = [] @triggers = [] end
Public Instance Methods
add_object(object)
click to toggle source
# File lib/db_meta/oracle/types/table.rb, line 20 def add_object(object) @indexes << object if object.type == "INDEX" @constraints << object if object.type == "CONSTRAINT" @triggers << object if object.type == "TRIGGER" end
ddl_drop()
click to toggle source
# File lib/db_meta/oracle/types/table.rb, line 110 def ddl_drop "DROP #{@type} #{@name} CASCADE CONSTRAINTS PURGE;" end
extract(args = {})
click to toggle source
# File lib/db_meta/oracle/types/table.rb, line 43 def extract(args = {}) buffer = [block(@name)] buffer << "CREATE#{" #{@temporary}" if @temporary} TABLE #{@name}" buffer << "(" # add columns @columns.each_with_index do |c, index| buffer << " #{c.extract}#{"," if index + 1 < @columns.size}" end # Primary key definition must be here for IOT tables if @iot_type == "IOT" constraint = @constraints.find { |c| c.constraint_type == "PRIMARY KEY" } buffer[-1] += "," buffer << " CONSTRAINT #{constraint.name}" buffer << " PRIMARY KEY (#{constraint.columns.join(", ")})" buffer << " ENABLE VALIDATE" end buffer << ")" buffer << translate_duration if @duration.size > 0 buffer << @cache if @temporary buffer << "ORGANIZATION INDEX" if @iot_type == "IOT" buffer[-1] += ";" buffer << nil # table comments if @comment buffer << "COMMENT ON TABLE #{@name} IS '#{@comment.text("'", "''")}';" end # table column comments @columns.each do |column| next if column.comment.nil? || column.comment.size == 0 buffer << "COMMENT ON COLUMN #{@name}.#{column.name} IS '#{column.comment.gsub("'", "''")}';" end # indexes if @indexes.size > 0 buffer << block("Indexes", 40) @indexes.each do |index| line = "" line << "-- System Index: " if index.system_object? || @iot_type == "IOT" line << index.extract(args) buffer << line end buffer << nil end # constaints if @constraints.size > 0 buffer << block("Constraints", 40) @constraints.sort_by { |c| [Constraint.sort_value(c.constraint_type), c.name] }.each do |constraint| buffer << constraint.extract(args.merge({comment: (constraint.constraint_type == "FOREIGN KEY")})) end end # triggers if @triggers.size > 0 buffer << block("Triggers", 40) buffer << @triggers.map { |o| o.extract(args) }.join("\n") buffer << nil end buffer.join("\n") end
fetch()
click to toggle source
# File lib/db_meta/oracle/types/table.rb, line 26 def fetch @comment = Comment.find(type: "TABLE", name: @name) @columns = Column.all(object_name: @name) connection = Connection.instance.get cursor = connection.exec("select temporary, cache, iot_type, duration from user_tables where table_name = '#{@name}'") while (row = cursor.fetch) @temporary = row[0].to_s.strip == "Y" ? "GLOBAL TEMPORARY" : nil @cache = row[1].to_s.strip == "Y" ? "CACHE" : "NOCACHE" @iot_type = row[2].to_s @duration = row[3].to_s end cursor.close rescue connection.logoff end
get_core_data_where_clause(id = 1000000)
click to toggle source
# File lib/db_meta/oracle/types/table.rb, line 114 def get_core_data_where_clause(id = 1000000) buffer = [] @constraints.each do |constraint| if constraint.constraint_type == "PRIMARY KEY" constraint.columns.each do |column| buffer << "#{column} < #{id}" end end end return "" if buffer.size == 0 "where " + buffer.join(" and ") end
Private Instance Methods
translate_duration()
click to toggle source
# File lib/db_meta/oracle/types/table.rb, line 131 def translate_duration case @duration when "SYS$TRANSACTION" "ON COMMIT DELETE ROWS" when "SYS$SESSION" "ON COMMIT PRESERVE ROWS" else "-- table duration definition [#{@duration}] is unknown and may need code adaptations" end end