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

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from StringUtil

#char_at, #equals_ignore_case

Constructor Details

#initialize ⇒ Rule

Returns a new instance of Rule.



45
46
47
48
49
50
51
52
53
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
# File 'lib/anbt-sql-formatter/rule.rb', line 45

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_names ⇒ Object

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

#indent_string ⇒ Object

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

#keyword ⇒ Object

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_indent ⇒ Object

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_words ⇒ Object

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_x ⇒ Object

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_indent ⇒ Object

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_nl ⇒ Object

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_comma ⇒ Object

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)


110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/anbt-sql-formatter/rule.rb', line 110

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