Sha256: 6667648a60d426ed61fe1df61879e25e9de2b1e627577d84880ca2d879e2c6ef

Contents?: true

Size: 1.81 KB

Versions: 9

Compression:

Stored size: 1.81 KB

Contents

#!/usr/bin/env ruby

require 'pry'

$service = nil
def service
  $service ||= com.espertech.esper.client.EPServiceProviderManager.getDefaultProvider
end

$administrator = nil
def administrator
  $administrator ||= service.getEPAdministrator
end

def compileEPL(query)
  administrator.compileEPL(query.expression)
end

def query_string(model)
  writer = java.io.StringWriter.new
  formatter = com.espertech.esper.client.soda.EPStatementFormatter.new
  if model.respond_to?(:toEPLElement)
    model.toEPLElement(writer)
    writer.toString
  elsif model.respond_to?(:toPrecedenceFreeEPL)
    begin
      model.toPrecedenceFreeEPL(writer)
    rescue ArgumentError
      model.toPrecedenceFreeEPL(writer, formatter)
    end
    writer.toString
  elsif model.is_a?(Java::ComEspertechEsperClientSoda::EPStatementObjectModel)
    model.toEPL
  else
    model.toEPL(writer, formatter)
    writer.toString
  end
end

def compiledExpression(query)
  model = compileEPL(query)
  mapping = {}
  query.targets.each do |target|
    mapping[target] = target
  end
  Norikra::Query.rewrite_query(model, mapping)
  query_string(model)
end

$LOAD_PATH.push './lib'
$LOAD_PATH.push './esper'

require 'norikra'

require 'java'

esper_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'esper'))

Dir.entries(esper_dir).each do |f|
  next unless f =~ /^esper-\d+\.\d+\.\d+\.jar$/
  require f
end

Dir.entries(File.join(esper_dir, 'esper', 'lib')).each do |f|
  if f =~ /^commons-logging-\d+\.\d+\.\d+\.jar$/ || f =~ /^antlr-runtime-\d+\.\d+\.jar/ || f =~ /^cglib-nodep-\d+\.\d+\.jar$/
    require File.join('esper', 'lib', f)
  end
end

puts <<DESC

Example:
  > query = Norikra::Query.new(name:'test1', expression:'SELECT ...')
  >
  > query.ast.to_a            # dump query AST
  > compiledExpression(query) # show parsed and compiled query

DESC

Pry.start

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
norikra-1.5.1-java script/pry
norikra-1.5.0-java script/pry
norikra-1.4.0-java script/pry
norikra-1.3.1-java script/pry
norikra-1.3.0-java script/pry
norikra-1.3.0.beta.1-java script/pry
norikra-1.2.2-java script/pry
norikra-1.2.1-java script/pry
norikra-1.2.0-java script/pry