lib/activefacts/generator/sql/oracle.rb in activefacts-compositions-1.9.17 vs lib/activefacts/generator/sql/oracle.rb in activefacts-compositions-1.9.18

- old
+ new

@@ -1,172 +1,23 @@ # # ActiveFacts Oracle SQL Schema Generator # # Copyright (c) 2009-2016 Clifford Heath. Read the LICENSE file. # -# Reserved words gathered from: -# https://docs.oracle.com/cd/B28359_01/appdev.111/b31231/appb.htm -# require 'digest/sha1' require 'activefacts/metamodel' require 'activefacts/compositions' require 'activefacts/generator/sql' +require 'activefacts/generator/traits/sql/oracle' module ActiveFacts module Generators # Options are comma or space separated: # * underscore class SQL class Oracle < SQL - def self.options - super.merge({ - # no: [String, "no new options defined here"] - }) - end - - def initialize composition, options = {} - super(composition, {'tables' => 'shout', 'columns' => 'shout'}.merge(options)) - end - - def table_name_max - 30 - end - - def data_type_context - OracleDataTypeContext.new - end - - def auto_assign_modifier - ' GENERATED BY DEFAULT ON NULL AS IDENTITY' - end - - def generate_schema - '' - end - - def normalise_type(type_name, length, value_constraint, options) - type = MM::DataType.normalise(type_name) - case type - when MM::DataType::TYPE_Integer - if aa = options[:auto_assign] - 'LONGINTEGER' - else - super - end - when MM::DataType::TYPE_Money; 'MONEY' - when MM::DataType::TYPE_DateTime; 'DATETIME' - when MM::DataType::TYPE_Timestamp;'DATETIME' - when MM::DataType::TYPE_Binary; - if type_name =~ /^(guid|uuid)$/i && (!length || length == 16) - if ![nil, ''].include?(options[:auto_assign]) - options[:default] = " DEFAULT SYS_GUID()" - options.delete(:auto_assign) - end - return ['RAW', 32] - end - ['LOB', length] - else - super - end - end - - # Reserved words cannot be used anywhere without quoting. - # Keywords have existing definitions, so should not be used without quoting. - # Both lists here are added to the supertype's lists - def reserved_words - @oracle_reserved_words ||= %w{ - ACCESS ARRAYLEN AUDIT CLUSTER COMMENT COMPRESS EXCLUSIVE - IDENTIFIED INDEX INITIAL LOCK LONG MAXEXTENTS MINUS - MODE MODIFY NOAUDIT NOCOMPRESS NOTFOUND NOWAIT OFFLINE - ONLINE PCTFREE RAW RENAME RESOURCE ROWID ROWLABEL ROWNUM - SHARE SQLBUF SUCCESSFUL SYNONYM SYSDATE UID VALIDATE - VARCHAR2 - } - @oracle_plsql_reserved_words ||= %w{ - ABORT ACCEPT ACCESS ARRAYLEN ASSERT ASSIGN BASE_TABLE - BINARY_INTEGER BODY CHAR_BASE CLUSTER CLUSTERS COLAUTH - COMPRESS CONSTANT CRASH CURRVAL DATABASE DATA_BASE DBA - DEBUGOFF DEBUGON DEFINITION DELAY DELTA DIGITS DISPOSE - ELSIF ENTRY EXCEPTION_INIT FORM GENERIC IDENTIFIED INDEX - INDEXES LIMITED MINUS MLSLABEL MODE NEXTVAL NOCOMPRESS - NUMBER_BASE PACKAGE PCTFREE POSITIVE PRAGMA PRIVATE - RAISE RECORD REMR RENAME RESOURCE REVERSE ROWID ROWLABEL - ROWNUM ROWTYPE RUN SEPARATE SQLERRM STDDEV SUBTYPE - TABAUTH TABLES TASK TERMINATE USE VARCHAR2 VARIANCE - VIEWS XOR - } - super + @oracle_reserved_words - end - - def key_words - # These keywords should not be used for columns or tables: - @oracle_key_words ||= %w{ - ANALYZE ARCHIVE ARCHIVELOG BACKUP BECOME BLOCK BODY - CACHE CANCEL CHANGE CHECKPOINT COMPILE CONTENTS CONTROLFILE - DATABASE DATAFILE DBA DISABLE DISMOUNT DUMP ENABLE - EVENTS EXCEPTIONS EXPLAIN EXTENT EXTERNALLY FLUSH FORCE - FREELIST FREELISTS INITRANS LAYER LISTS LOGFILE MANAGE - MANUAL MAXDATAFILES MAXINSTANCES MAXLOGFILES MAXLOGHISTORY - MAXLOGMEMBERS MAXTRANS MINEXTENTS MOUNT NOARCHIVELOG - NOCACHE NOCYCLE NOMAXVALUE NOMINVALUE NOORDER NORESETLOGS - NORMAL NOSORT OPTIMAL OWN PACKAGE PARALLEL PCTINCREASE - PCTUSED PLAN PRIVATE PROFILE QUOTA RECOVER RESETLOGS - RESTRICTED REUSE ROLES SCN SEGMENT SHARED SNAPSHOT SORT - STATEMENT_ID STATISTICS STOP STORAGE SWITCH TABLES - TABLESPACE THREAD TRACING TRIGGERS UNLIMITED USE - } - super + @oracle_key_words - end - - def go s = '' - "#{s};\n\n" - end - - def open_escape - '"' - end - - def close_escape - '"' - end - - def index_kind(index) - '' - end - - class OracleDataTypeContext < SQLDataTypeContext - def integer_ranges - [ - ['SHORTINTEGER', -2**15, 2**15-1], # The standard says -10^5..10^5 (less than 16 bits) - ['INTEGER', -2**31, 2**31-1], # The standard says -10^10..10^10 (more than 32 bits!) - ['LONGINTEGER', -2**63, 2**63-1], # The standard says -10^19..10^19 (less than 64 bits) - ] - end - - def boolean_type - 'BOOLEAN' - end - - def valid_from_type - 'TIMESTAMP' - end - - # There is no performance benefit in using fixed-length CHAR fields, - # and an added burden of trimming the implicitly added white-space - def default_char_type - (@unicode ? 'N' : '') + - 'VARCHAR' - end - - def default_varchar_type - (@unicode ? 'N' : '') + - 'VARCHAR' - end - - def date_time_type - 'TIMESTAMP' - end - end + prepend Traits::SQL::Oracle + extend Traits::SQL::Oracle # Needed for class methods, like options end end publish_generator SQL::Oracle end