Class: Phoenix::Rjb

Inherits:
Object
  • Object
show all
Defined in:
lib/phoenix/rjb.rb

Class Method Summary collapse

Class Method Details

.execute(sql) ⇒ Object

查询 return => Array [#<>, #<>, …] 更新(增加, 修改,删除) return 1 成功, 0 失败



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/phoenix/rjb.rb', line 13

def self.execute(sql)
  Rails.logger.info "[SQL]: #{sql}\n" if defined? Rails

  h = YAML.load(File.read "#{Rails.root}/config/phoenix.yml")
  host = h["host"]
  port = h["port"]

  c = ::Rjb::import('phoenix.Connect')
  instance = c.new(host, port)
  if self.is_query?(sql)
    rs = instance.executeQuery(sql)
    if rs.nil?
      arr = []
    else
      arr = resultset_to_obj(rs)
    end
    instance.close()
    return arr
  else
    i = instance.executeUpdate(sql)
    # p i.methods - Object.methods
    # p i.intValue
    instance.close()
    return i.intValue
  end
end

.get_meta_data(table_name) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/phoenix/rjb.rb', line 40

def self.(table_name)
  c = ::Rjb::import('phoenix.Connect')

  h = YAML.load(File.read "#{Rails.root}/config/phoenix.yml")
  host = h["host"]
  port = h["port"]

  instance = c.new(host, port)
  rs = instance.(table_name)
  # binding.pry
  # rs.java_methods
  arr = resultset_to_meta(rs)
  instance.close()
  $stdout.print "[MetaData:#{table_name}]: #{arr.inspect}\n"
  return arr
end

.is_query?(s) ⇒ Boolean

Returns:

  • (Boolean)


5
6
7
# File 'lib/phoenix/rjb.rb', line 5

def self.is_query?(s)
  s and !(s.strip =~ /^select/i).nil?
end

.resultset_to_meta(resultset) ⇒ Object



57
58
59
60
61
62
63
64
65
# File 'lib/phoenix/rjb.rb', line 57

def self.resultset_to_meta(resultset)
  columns = []
  while resultset.next
    column_name = resultset.getString("COLUMN_NAME")
    column_type = resultset.getString("TYPE_NAME")
    columns << { column_name: column_name, column_type: column_type }
  end
  return columns
end

.resultset_to_obj(resultset) ⇒ Object

把 Java 中的 ResultSet对象 转化为 Ruby 中的 对象 gist.github.com/rjackson/1366047



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
117
# File 'lib/phoenix/rjb.rb', line 69

def self.resultset_to_obj(resultset)
  meta = resultset.
  table_name = meta.table_name(1)
  if table_name == "BASE_SINDEX"
    table_name = "BASE"
  end
  rows = []

  while resultset.next
    row = {}
    (1..meta.column_count).each do |i|
      name = meta.column_name i
      row[name]  =  case meta.column_type(i)
                    when -6, -5, 5, 4
                      # TINYINT, BIGINT, INTEGER
                      resultset.getLong(i).to_i
                    when 41
                      # Date
                      resultset.getDate(i)
                    when 92
                      # Time
                      resultset.getTime(i).to_i
                    when 93
                      # Timestamp
                      resultset.getTimestamp(i)
                    when 2, 3, 6
                      # NUMERIC, DECIMAL, FLOAT
                      case meta.scale(i)
                      when 0
                        resultset.getLong(i).to_i
                      else
                        BigDecimal.new(resultset.getString(i).to_s)
                      end
                    when 1, -15, -9, 12
                      # CHAR, NCHAR, NVARCHAR, VARCHAR
                      resultset.getString(i).to_s
                    else
                      resultset.getString(i).to_s
                    end
    end

    begin
      rows << table_name.downcase.camelize.constantize.new(row)
    rescue NameError
      raise "[Error] Missing #{table_name.downcase.camelize} Model, pls define it\n"
    end  
  end
  rows
end