Class: AnbtSql::Rule

Inherits:
Object
  • Object
show all
Includes:
StringUtil
Defined in:
lib/anbt-sql-formatter/rule.rb

Constant Summary collapse

KEYWORD_NONE =

キーワードの変換規則: 何もしない

0
KEYWORD_UPPER_CASE =

キーワードの変換規則: 大文字にする

1
KEYWORD_LOWER_CASE =

キーワードの変換規則: 小文字にする

2
ONELINE_IN_VALUES_NUM =

IN の値を一行表示する場合の in_values_num 値

0

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from StringUtil

#char_at, #equals_ignore_case

Constructor Details

#initializeRule

Returns a new instance of Rule.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/anbt-sql-formatter/rule.rb', line 54

def initialize
  # キーワードの変換規則.
  @keyword = KEYWORD_UPPER_CASE

  # インデントの文字列. 設定は自由入力とする。
  # 通常は " ", " ", "\t" のいずれか。
  @indent_string = "    "

  @space_after_comma = false

  # __foo
  # ____KW
  @kw_plus1_indent_x_nl = %w(INSERT INTO CREATE DROP TRUNCATE TABLE CASE)

  # ____foo
  # __KW
  # ____bar
  @kw_minus1_indent_nl_x_plus1_indent = %w(FROM WHERE SET HAVING)
  @kw_minus1_indent_nl_x_plus1_indent.concat ["ORDER BY", "GROUP BY"]

  # __foo
  # ____KW
  @kw_nl_x_plus1_indent = %w(ON USING)

  # __foo
  # __KW
  @kw_nl_x = %w(OR THEN ELSE)
  # @kw_nl_x = %w(OR WHEN ELSE)

  @kw_multi_words = ["ORDER BY", "GROUP BY"]

  # 関数の名前。
  # Java版は初期値 null
  @function_names =
    [
     # getNumericFunctions
     "ABS", "ACOS", "ASIN", "ATAN", "ATAN2", "BIT_COUNT", "CEILING",
     "COS", "COT", "DEGREES", "EXP", "FLOOR", "LOG", "LOG10",
     "MAX", "MIN", "MOD", "PI", "POW", "POWER", "RADIANS", "RAND",
     "ROUND", "SIN", "SQRT", "TAN", "TRUNCATE",
     # getStringFunctions
     "ASCII", "BIN", "BIT_LENGTH", "CHAR", "CHARACTER_LENGTH",
     "CHAR_LENGTH", "CONCAT", "CONCAT_WS", "CONV", "ELT",
     "EXPORT_SET", "FIELD", "FIND_IN_SET", "HEX,INSERT", "INSTR",
     "LCASE", "LEFT", "LENGTH", "LOAD_FILE", "LOCATE", "LOCATE",
     "LOWER", "LPAD", "LTRIM", "MAKE_SET", "MATCH", "MID", "OCT",
     "OCTET_LENGTH", "ORD", "POSITION", "QUOTE", "REPEAT",
     "REPLACE", "REVERSE", "RIGHT", "RPAD", "RTRIM", "SOUNDEX",
     "SPACE", "STRCMP", "SUBSTRING", "SUBSTRING", "SUBSTRING",
     "SUBSTRING", "SUBSTRING_INDEX", "TRIM", "UCASE", "UPPER",
     # getSystemFunctions
     "DATABASE", "USER", "SYSTEM_USER", "SESSION_USER", "PASSWORD",
     "ENCRYPT", "LAST_INSERT_ID", "VERSION",
     # getTimeDateFunctions
     "DAYOFWEEK", "WEEKDAY", "DAYOFMONTH", "DAYOFYEAR", "MONTH",
     "DAYNAME", "MONTHNAME", "QUARTER", "WEEK", "YEAR", "HOUR",
     "MINUTE", "SECOND", "PERIOD_ADD", "PERIOD_DIFF", "TO_DAYS",
     "FROM_DAYS", "DATE_FORMAT", "TIME_FORMAT", "CURDATE",
     "CURRENT_DATE", "CURTIME", "CURRENT_TIME", "NOW", "SYSDATE",
     "CURRENT_TIMESTAMP", "UNIX_TIMESTAMP", "FROM_UNIXTIME",
     "SEC_TO_TIME", "TIME_TO_SEC"
    ]
end

Instance Attribute Details

#function_namesObject

Returns the value of attribute function_names.



25
26
27
# File 'lib/anbt-sql-formatter/rule.rb', line 25

def function_names
  @function_names
end

#in_values_numObject

Limit number of values per line in IN clause to this value.

nil

one value per line (default)

n (>=2)

n values per line

ONELINE_IN_VALUES_NUM

all values in one line



40
41
42
# File 'lib/anbt-sql-formatter/rule.rb', line 40

def in_values_num
  @in_values_num
end

#indent_stringObject

Returns the value of attribute indent_string.



25
26
27
# File 'lib/anbt-sql-formatter/rule.rb', line 25

def indent_string
  @indent_string
end

#keywordObject

Returns the value of attribute keyword.



25
26
27
# File 'lib/anbt-sql-formatter/rule.rb', line 25

def keyword
  @keyword
end

#kw_minus1_indent_nl_x_plus1_indentObject

Returns the value of attribute kw_minus1_indent_nl_x_plus1_indent.



31
32
33
# File 'lib/anbt-sql-formatter/rule.rb', line 31

def kw_minus1_indent_nl_x_plus1_indent
  @kw_minus1_indent_nl_x_plus1_indent
end

#kw_multi_wordsObject

Returns the value of attribute kw_multi_words.



26
27
28
# File 'lib/anbt-sql-formatter/rule.rb', line 26

def kw_multi_words
  @kw_multi_words
end

#kw_nl_xObject

Returns the value of attribute kw_nl_x.



32
33
34
# File 'lib/anbt-sql-formatter/rule.rb', line 32

def kw_nl_x
  @kw_nl_x
end

#kw_nl_x_plus1_indentObject

Returns the value of attribute kw_nl_x_plus1_indent.



33
34
35
# File 'lib/anbt-sql-formatter/rule.rb', line 33

def kw_nl_x_plus1_indent
  @kw_nl_x_plus1_indent
end

#kw_plus1_indent_x_nlObject

nl: New Line x: the keyword



30
31
32
# File 'lib/anbt-sql-formatter/rule.rb', line 30

def kw_plus1_indent_x_nl
  @kw_plus1_indent_x_nl
end

#space_after_commaObject

Returns the value of attribute space_after_comma.



25
26
27
# File 'lib/anbt-sql-formatter/rule.rb', line 25

def space_after_comma
  @space_after_comma
end

Instance Method Details

#function?(name) ⇒ Boolean

Returns:

  • (Boolean)


119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/anbt-sql-formatter/rule.rb', line 119

def function?(name)
  if (@function_names == nil)
    return false
  end

  for i in 0...(@function_names.length)
    if (equals_ignore_case(@function_names[i], name))
      return true
    end
  end

  return false
end