Module: Mkxms::Mssql

Defined in:
lib/mkxms/mssql.rb,
lib/mkxms/mssql/utils.rb,
lib/mkxms/mssql/engine.rb,
lib/mkxms/mssql/version.rb,
lib/mkxms/mssql/clr_impl.rb,
lib/mkxms/mssql/keywords.rb,
lib/mkxms/mssql/exceptions.rb,
lib/mkxms/mssql/index_column.rb,
lib/mkxms/mssql/query_cursor.rb,
lib/mkxms/mssql/role_handler.rb,
lib/mkxms/mssql/view_handler.rb,
lib/mkxms/mssql/index_handler.rb,
lib/mkxms/mssql/table_handler.rb,
lib/mkxms/mssql/schema_handler.rb,
lib/mkxms/mssql/synonym_handler.rb,
lib/mkxms/mssql/clr_type_handler.rb,
lib/mkxms/mssql/database_handler.rb,
lib/mkxms/mssql/function_handler.rb,
lib/mkxms/mssql/property_handler.rb,
lib/mkxms/mssql/filegroup_handler.rb,
lib/mkxms/mssql/permission_handler.rb,
lib/mkxms/mssql/references_handler.rb,
lib/mkxms/mssql/statistics_handler.rb,
lib/mkxms/mssql/table_type_handler.rb,
lib/mkxms/mssql/dml_trigger_handler.rb,
lib/mkxms/mssql/foreign_key_handler.rb,
lib/mkxms/mssql/primary_key_handler.rb,
lib/mkxms/mssql/scalar_type_handler.rb,
lib/mkxms/mssql/clr_assembly_handler.rb,
lib/mkxms/mssql/clr_function_handler.rb,
lib/mkxms/mssql/declaratives_creator.rb,
lib/mkxms/mssql/clr_aggregate_handler.rb,
lib/mkxms/mssql/adoption_script_writer.rb,
lib/mkxms/mssql/indented_string_builder.rb,
lib/mkxms/mssql/sql_string_manipulators.rb,
lib/mkxms/mssql/access_object_definition.rb,
lib/mkxms/mssql/check_constraint_handler.rb,
lib/mkxms/mssql/stored_procedure_handler.rb,
lib/mkxms/mssql/keylike_constraint_helper.rb,
lib/mkxms/mssql/unique_constraint_handler.rb,
lib/mkxms/mssql/default_constraint_handler.rb,
lib/mkxms/mssql/clr_stored_procedure_handler.rb

Defined Under Namespace

Modules: AccessObjectDefinition, Dependencies, ExtendedProperties, Property, SqlStringManipulators, Utils Classes: AdoptionScriptWriter, CheckConstraint, CheckConstraintHandler, ClrAggregate, ClrArggregateHandler, ClrAssembly, ClrAssemblyHandler, ClrClass, ClrFunction, ClrFunctionHandler, ClrMethod, ClrStoredProcedure, ClrStoredProcedureHandler, ClrType, ClrTypeHandler, Column, DatabaseFile, DatabaseHandler, DeclarativesCreator, Default, DefaultConstraint, DefaultConstraintHandler, DmlTriggerHandler, Engine, Filegroup, FilegroupHandler, ForeignKey, ForeignKeyHandler, Function, FunctionHandler, IndentedStringBuilder, Index, IndexHandler, KeylikeConstraint, Parameter, ParameterHandler, Permission, PermissionGroup, PermissionHandler, PrimaryKey, PrimaryKeyHandler, ProgramArgumentError, PropertyHandler, QueryCursor, Reference, ReferencesHandler, ResultType, Role, RoleHandler, ScalarType, ScalarTypeHandler, Schema, SchemaHandler, Statistics, StatisticsHandler, StoredProcedure, StoredProcedureHandler, Synonym, SynonymHandler, Table, TableHandler, TableType, TableTypeCheckConstraintHandler, TableTypeColumnHandler, TableTypeHandler, TableTypeKeyConstraintHandler, Trigger, UniqueConstraint, UniqueConstraintHandler, UnsupportedFeatureError, View, ViewHandler

Constant Summary collapse

VERSION =
"1.1.1"
KEYWORDS =
%w[
  ABSOLUTE
  ACTION
  ADA
  ADD
  ADMIN
  AFTER
  AGGREGATE
  ALIAS
  ALL
  ALLOCATE
  ALTER
  AND
  ANY
  ARE
  ARRAY
  AS
  ASC
  ASENSITIVE
  ASSERTION
  ASYMMETRIC
  AT
  ATOMIC
  AUTHORIZATION
  AVG
  BACKUP
  BEFORE
  BEGIN
  BETWEEN
  BINARY
  BIT
  BIT_LENGTH
  BLOB
  BOOLEAN
  BOTH
  BREADTH
  BREAK
  BROWSE
  BULK
  BY
  CALL
  CALLED
  CARDINALITY
  CASCADE
  CASCADED
  CASE
  CAST
  CATALOG
  CHAR
  CHARACTER
  CHARACTER_LENGTH
  CHAR_LENGTH
  CHECK
  CHECKPOINT
  CLASS
  CLOB
  CLOSE
  CLUSTERED
  COALESCE
  COLLATE
  COLLATION
  COLLECT
  COLUMN
  COMMIT
  COMPLETION
  COMPUTE
  CONDITION
  CONNECT
  CONNECTION
  CONSTRAINT
  CONSTRAINTS
  CONSTRUCTOR
  CONTAINS
  CONTAINSTABLE
  CONTINUE
  CONVERT
  CORR
  CORRESPONDING
  COUNT
  COVAR_POP
  COVAR_SAMP
  CREATE
  CROSS
  CUBE
  CUME_DIST
  CURRENT
  CURRENT_CATALOG
  CURRENT_DATE
  CURRENT_DEFAULT_TRANSFORM_GROUP
  CURRENT_PATH
  CURRENT_ROLE
  CURRENT_SCHEMA
  CURRENT_TIME
  CURRENT_TIMESTAMP
  CURRENT_TRANSFORM_GROUP_FOR_TYPE
  CURRENT_USER
  CURSOR
  CYCLE
  DATA
  DATABASE
  DATE
  DAY
  DBCC
  DEALLOCATE
  DEC
  DECIMAL
  DECLARE
  DEFAULT
  DEFERRABLE
  DEFERRED
  DELETE
  DENY
  DEPTH
  DEREF
  DESC
  DESCRIBE
  DESCRIPTOR
  DESTROY
  DESTRUCTOR
  DETERMINISTIC
  DIAGNOSTICS
  DICTIONARY
  DISCONNECT
  DISK
  DISTINCT
  DISTRIBUTED
  DOMAIN
  DOUBLE
  DROP
  DUMP
  DYNAMIC
  EACH
  ELEMENT
  ELSE
  END
  END-EXEC
  EQUALS
  ERRLVL
  ESCAPE
  EVERY
  EXCEPT
  EXCEPTION
  EXEC
  EXECUTE
  EXISTS
  EXIT
  EXTERNAL
  EXTRACT
  FALSE
  FETCH
  FILE
  FILLFACTOR
  FILTER
  FIRST
  FLOAT
  FOR
  FOREIGN
  FORTRAN
  FOUND
  FREE
  FREETEXT
  FREETEXTTABLE
  FROM
  FULL
  FULLTEXTTABLE
  FUNCTION
  FUSION
  GENERAL
  GET
  GLOBAL
  GO
  GOTO
  GRANT
  GROUP
  GROUPING
  HAVING
  HOLD
  HOLDLOCK
  HOST
  HOUR
  IDENTITY
  IDENTITYCOL
  IDENTITY_INSERT
  IF
  IGNORE
  IMMEDIATE
  IN
  INCLUDE
  INDEX
  INDICATOR
  INITIALIZE
  INITIALLY
  INNER
  INOUT
  INPUT
  INSENSITIVE
  INSERT
  INT
  INTEGER
  INTERSECT
  INTERSECTION
  INTERVAL
  INTO
  IS
  ISOLATION
  ITERATE
  JOIN
  KEY
  KILL
  LANGUAGE
  LARGE
  LAST
  LATERAL
  LEADING
  LEFT
  LESS
  LEVEL
  LIKE
  LIKE_REGEX
  LIMIT
  LINENO
  LN
  LOAD
  LOCAL
  LOCALTIME
  LOCALTIMESTAMP
  LOCATOR
  LOWER
  MAP
  MATCH
  MAX
  MEMBER
  MERGE
  METHOD
  MIN
  MINUTE
  MOD
  MODIFIES
  MODIFY
  MODULE
  MONTH
  MULTISET
  NAMES
  NATIONAL
  NATURAL
  NCHAR
  NCLOB
  NEW
  NEXT
  NO
  NOCHECK
  NONCLUSTERED
  NONE
  NORMALIZE
  NOT
  NULL
  NULLIF
  NUMERIC
  OBJECT
  OCCURRENCES_REGEX
  OCTET_LENGTH
  OF
  OFF
  OFFSETS
  OLD
  ON
  ONLY
  OPEN
  OPENDATASOURCE
  OPENQUERY
  OPENROWSET
  OPENXML
  OPERATION
  OPTION
  OR
  ORDER
  ORDINALITY
  OUT
  OUTER
  OUTPUT
  OVER
  OVERLAPS
  OVERLAY
  PAD
  PARAMETER
  PARAMETERS
  PARTIAL
  PARTITION
  PASCAL
  PATH
  PERCENT
  PERCENTILE_CONT
  PERCENTILE_DISC
  PERCENT_RANK
  PIVOT
  PLAN
  POSITION
  POSITION_REGEX
  POSTFIX
  PRECISION
  PREFIX
  PREORDER
  PREPARE
  PRESERVE
  PRIMARY
  PRINT
  PRIOR
  PRIVILEGES
  PROC
  PROCEDURE
  PUBLIC
  RAISERROR
  RANGE
  READ
  READS
  READTEXT
  REAL
  RECONFIGURE
  RECURSIVE
  REF
  REFERENCES
  REFERENCING
  REGR_AVGX
  REGR_AVGY
  REGR_COUNT
  REGR_INTERCEPT
  REGR_R2
  REGR_SLOPE
  REGR_SXX
  REGR_SXY
  REGR_SYY
  RELATIVE
  RELEASE
  REPLICATION
  RESTORE
  RESTRICT
  RESULT
  RETURN
  RETURNS
  REVERT
  REVOKE
  RIGHT
  ROLE
  ROLLBACK
  ROLLUP
  ROUTINE
  ROW
  ROWCOUNT
  ROWGUIDCOL
  ROWS
  RULE
  SAVE
  SAVEPOINT
  SCHEMA
  SCOPE
  SCROLL
  SEARCH
  SECOND
  SECTION
  SECURITYAUDIT
  SELECT
  SEMANTICKEYPHRASETABLE
  SEMANTICSIMILARITYDETAILSTABLE
  SEMANTICSIMILARITYTABLE
  SENSITIVE
  SEQUENCE
  SESSION
  SESSION_USER
  SET
  SETS
  SETUSER
  SHUTDOWN
  SIMILAR
  SIZE
  SMALLINT
  SOME
  SPACE
  SPECIFIC
  SPECIFICTYPE
  SQL
  SQLCA
  SQLCODE
  SQLERROR
  SQLEXCEPTION
  SQLSTATE
  SQLWARNING
  START
  STATE
  STATEMENT
  STATIC
  STATISTICS
  STDDEV_POP
  STDDEV_SAMP
  STRUCTURE
  SUBMULTISET
  SUBSTRING
  SUBSTRING_REGEX
  SUM
  SYMMETRIC
  SYSTEM
  SYSTEM_USER
  TABLE
  TABLESAMPLE
  TEMPORARY
  TERMINATE
  TEXTSIZE
  THAN
  THEN
  TIME
  TIMESTAMP
  TIMEZONE_HOUR
  TIMEZONE_MINUTE
  TO
  TOP
  TRAILING
  TRAN
  TRANSACTION
  TRANSLATE
  TRANSLATE_REGEX
  TRANSLATION
  TREAT
  TRIGGER
  TRIM
  TRUE
  TRUNCATE
  TRY_CONVERT
  TSEQUAL
  UESCAPE
  UNDER
  UNION
  UNIQUE
  UNKNOWN
  UNNEST
  UNPIVOT
  UPDATE
  UPDATETEXT
  UPPER
  USAGE
  USE
  USER
  USING
  VALUE
  VALUES
  VARCHAR
  VARIABLE
  VARYING
  VAR_POP
  VAR_SAMP
  VIEW
  WAITFOR
  WHEN
  WHENEVER
  WHERE
  WHILE
  WIDTH_BUCKET
  WINDOW
  WITH
  WITHIN
  WITHOUT
  WORK
  WRITE
  WRITETEXT
  XMLAGG
  XMLATTRIBUTES
  XMLBINARY
  XMLCAST
  XMLCOMMENT
  XMLCONCAT
  XMLDOCUMENT
  XMLELEMENT
  XMLEXISTS
  XMLFOREST
  XMLITERATE
  XMLNAMESPACES
  XMLPARSE
  XMLPI
  XMLQUERY
  XMLSERIALIZE
  XMLTABLE
  XMLTEXT
  XMLVALIDATE
  YEAR
  ZONE
]
KEYWORDS_SET =
Set.new KEYWORDS

Class Method Summary collapse

Class Method Details

.generate_declaratives_indicated(options) ⇒ Object



45
46
47
48
49
50
# File 'lib/mkxms/mssql.rb', line 45

def self.generate_declaratives_indicated(options)
  options[:generate_declaratives].tap do |val|
    return val unless val.nil?
  end
  return Gem::Version.new(XMigra::VERSION) >= Gem::Version.new("1.6.0")
end

.generate_from(document, options) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/mkxms/mssql.rb', line 35

def self.generate_from(document, options)
  db_handler = DatabaseHandler.new(**(options.to_h))
  engine = Engine.new(document, db_handler)
  engine.run
  db_handler.create_source_files
  if generate_declaratives_indicated(options)
    DeclarativesCreator.new(document, options[:schema_dir]).create_artifacts
  end
end

.parse_argv(argv = ARGV.dup) ⇒ Object



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
# File 'lib/mkxms/mssql.rb', line 8

def self.parse_argv(argv = ARGV.dup)
  options = OpenStruct.new
  optparser = OptionParser.new do |flags|
    flags.banner = "Usage: #{File.basename($0)} [<option> [<option> ...]] [DB_DESCRIPTION_FILE]"
    flags.separator ''
    flags.separator 'Options:'
    
    options.schema_dir = Pathname.pwd
    flags.on('-o', '--outdir=SCHEMA_DIR', "Output in SCHEMA_DIR") do |schema_dir|
      options.schema_dir = Pathname(schema_dir).expand_path
    end
    
    options.generate_declaratives = true
    flags.on('--[no-]declaratives', "Generate declarative support files") do |v|
      options.generate_declaratives = v
    end
  end
  
  db_files = optparser.parse(argv)
  case db_files.length
  when ->(n) {n > 1}
    "Too many DB_DESCRIPTION_FILEs given"
  end.tap {|msg| raise ProgramArgumentError.new(msg) if msg}
  
  return [db_files[0], options]
end

.run_program(argv = ARGV.dup) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/mkxms/mssql.rb', line 60

def self.run_program(argv = ARGV.dup)
  description_file, options = parse_argv(argv)
  document = with_db_description_io(description_file) do |xml_file|
    REXML::Document.new(xml_file)
  end
  generate_from(document, options)
end

.with_db_description_io(file_path, &blk) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/mkxms/mssql.rb', line 52

def self.with_db_description_io(file_path, &blk)
  if file_path
    File.open(file_path, 'r', &blk)
  else
    blk.call($stdin)
  end
end