class OCI8AutoBinder::OCI8
OCI8#exec
を上書きし、OracleSqlParser::Grammar::GrammarParserで構文解析した結果をOCI8#execに渡します。 Pass the result that was parsed by OracleSqlParser::Grammar::GrammarParser to OCI8#exec
Public Instance Methods
exec(sql, *bindvars, &block)
Also aliased as: exec_without_auto_binder
Alias for: exec_with_auto_binder
exec_with_auto_binder(sql, *bindvars, &block)
click to toggle source
OracleSqlParser::Grammar::GrammarParserで構文解析し、NumberLiteralとTextLiteralをbinding変数としてOCI8#execに渡す
# File lib/oci8-auto-binder/base.rb, line 36 def exec_with_auto_binder(sql, *bindvars, &block) if bindvars.length != 0 logger.info {"FOUND_BINDVARS:#{sql}, #{bindvars.inspect}"} if logger return exec_without_auto_binder(sql, *bindvars, &block) end syntax_tree = parser.parse(sql) unless syntax_tree logger.error {"PARSE_ERROR:#{sql}, #{bindvars.inspect}"} if logger return exec_without_auto_binder(sql, *bindvars, &block) end p = syntax_tree.ast.to_parameterized if p.params.size == 0 logger.info {"NO_PARAMS:#{sql}, #{bindvars.inspect}"} if logger return exec_without_auto_binder(sql, *bindvars, &block) end values = p.params.values.map do |v| case v when OracleSqlParser::Ast::NumberLiteral v.to_decimal when OracleSqlParser::Ast::TextLiteral v.to_s else raise 'unsupported type' end end logger.info {"PARSE_SUCCESS:#{sql}, #{p.to_sql}, #{values.inspect}"} if logger return exec_without_auto_binder(p.to_sql, *values, &block) end
Also aliased as: exec
logger()
click to toggle source
# File lib/oci8-auto-binder/base.rb, line 70 def logger OCI8AutoBinder.logger end
Private Instance Methods
parser()
click to toggle source
GrammerParserを取得する get GrammerParser
# File lib/oci8-auto-binder/base.rb, line 77 def parser @parser ||= OracleSqlParser::Grammar::GrammarParser.new end