hypersonicplus 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/hdatastructures/hfieldtable.rb +285 -0
- data/lib/hdatastructures/hhash.rb +9 -0
- data/lib/hdatastructures/hlist.rb +100 -0
- data/lib/hdatastructures/hrecord.rb +75 -0
- data/lib/hdatastructures/hspreadfieldtable.rb +129 -0
- data/lib/hdb/hdataloader.rb +75 -0
- data/lib/hdb/hdb.rb +357 -0
- data/lib/hdb/hdb_test.rb +248 -0
- data/lib/hdb/hdbgenerator.rb +211 -0
- data/lib/hdb/hdbi.rb +63 -0
- data/lib/hdb/hdbi_test.rb +133 -0
- data/lib/hdb/hfield.rb +180 -0
- data/lib/hdb/hmysql.rb +99 -0
- data/lib/hdb/hmysql2.rb +96 -0
- data/lib/hdb/hodb.rb +948 -0
- data/lib/hdb/hpgsql.rb +54 -0
- data/lib/hengine/application_controller.rb +204 -0
- data/lib/hengine/hconfiguration.rb +40 -0
- data/lib/hengine/hhotlogger.rb +13 -0
- data/lib/hengine/hlogger.rb +119 -0
- data/lib/hengine/hmalloc.rb +275 -0
- data/lib/hengine/hmoduleloader.rb +15 -0
- data/lib/hengine/hsessiondata.rb +79 -0
- data/lib/hengine/hshareddata.rb +60 -0
- data/lib/hengine/htranslate.rb +40 -0
- data/lib/hengine/hviewloader.rb +99 -0
- data/lib/hinit/hinit.rb +3 -0
- data/lib/hmisc/hcolorize.rb +100 -0
- data/lib/hmisc/hdecoratorfunctions.rb +15 -0
- data/lib/hmisc/hdir.rb +19 -0
- data/lib/hmisc/hhtmlnode.rb +27 -0
- data/lib/hmisc/hinputvalidator.rb +95 -0
- data/lib/hmisc/hio.rb +142 -0
- data/lib/hmisc/hjson.rb +16 -0
- data/lib/hsqlmanager/hpgsqldatabasemanager.rb +76 -0
- data/lib/hsqlmanager/hsqldatabasemanager.rb +349 -0
- data/lib/hsqlmanager/hsqltable.rb +16 -0
- data/lib/husermanager/husermanager.rb +122 -0
- data/lib/hwidgets/haccordionmenu.rb +117 -0
- data/lib/hwidgets/hcheckboxtag.rb +33 -0
- data/lib/hwidgets/hdbactionbuttons.rb +26 -0
- data/lib/hwidgets/hdbcombobox.rb +71 -0
- data/lib/hwidgets/hdbdialogview.rb +190 -0
- data/lib/hwidgets/hdbfilterview.rb +28 -0
- data/lib/hwidgets/hdbtableview.rb +213 -0
- data/lib/hwidgets/hdbview.rb +63 -0
- data/lib/hwidgets/hdivtag.rb +9 -0
- data/lib/hwidgets/hdropdown.rb +44 -0
- data/lib/hwidgets/hformfield.rb +91 -0
- data/lib/hwidgets/hgrouptag.rb +65 -0
- data/lib/hwidgets/hhiddeninputtag.rb +12 -0
- data/lib/hwidgets/hinputtag.rb +55 -0
- data/lib/hwidgets/hlabeltag.rb +30 -0
- data/lib/hwidgets/hmainview.rb +37 -0
- data/lib/hwidgets/hpagination.rb +65 -0
- data/lib/hwidgets/hradiobuttontag.rb +30 -0
- data/lib/hwidgets/hselecttag.rb +32 -0
- data/lib/hwidgets/htableview.rb +262 -0
- data/lib/hwidgets/htabview.rb +84 -0
- data/lib/hwidgets/htextareatag.rb +20 -0
- data/lib/hwidgets/htopnav.rb +85 -0
- data/lib/hwidgets/hwidget.rb +423 -0
- data/lib/hypersonic.rb +9 -0
- metadata +276 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "hdatastructures/hfieldtable"
|
3
|
+
|
4
|
+
class HSpreadFieldTable < HFieldTable
|
5
|
+
|
6
|
+
attr_accessor :decorator
|
7
|
+
attr_reader :summaryList
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@decorator = false
|
12
|
+
@summaryList = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def addSummary(summaryName, summaryValue)
|
16
|
+
|
17
|
+
record = HRecord.new(summaryName)
|
18
|
+
record.setValue(summaryName)
|
19
|
+
record.set(:value, summaryValue)
|
20
|
+
@summaryList << record
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def noname(data, value)
|
25
|
+
return data.class == HRecord ? data.dup.setValue(value) : value
|
26
|
+
end
|
27
|
+
|
28
|
+
def decorate(data, value, fieldName)
|
29
|
+
decorator = @fields[fieldName].decorator
|
30
|
+
value = decorator.gsub("§arg§", value) if (@decorator and decorator)
|
31
|
+
return self.noname(data, value)
|
32
|
+
end
|
33
|
+
|
34
|
+
def evalDataByFieldName(row, fieldName)
|
35
|
+
|
36
|
+
value = self.valueByFieldName(row, fieldName)
|
37
|
+
return value if value.class == Fixnum
|
38
|
+
value = value.gsub(/`([a-zA-Z_]+[a-zA-Z_0-9]*)/) { |var| self.evalDataByFieldName(row, $1) }
|
39
|
+
return eval(value)
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
def dataByFieldName(row, fieldName)
|
44
|
+
|
45
|
+
value = data = super(row, fieldName)
|
46
|
+
value = data.value() if (data.class == HRecord)
|
47
|
+
return self.noname(data, self.evalDataByFieldName(row, fieldName)) if value.class == String and value.index('`')
|
48
|
+
return self.decorate(data, value, fieldName)
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def showSummary()
|
53
|
+
|
54
|
+
@summaryList.each do |data|
|
55
|
+
if data
|
56
|
+
print $hpformat % data.value()
|
57
|
+
print $hpformat % data.value(:value)
|
58
|
+
end
|
59
|
+
puts
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
def self.test()
|
65
|
+
|
66
|
+
fieldTable = HSpreadFieldTable.new()
|
67
|
+
fieldTable.addFieldName("quantity")
|
68
|
+
fieldTable.addFieldName("description")
|
69
|
+
fieldTable.addFieldName("price")
|
70
|
+
fieldTable.addFieldName("amount", false)
|
71
|
+
fieldTable.addFieldName("score")
|
72
|
+
fieldTable.addFieldName("other")
|
73
|
+
|
74
|
+
fieldTable.setFieldCaption("quantity", "Quantity")
|
75
|
+
fieldTable.setFieldCaption("description", "Description")
|
76
|
+
fieldTable.setFieldCaption("price", "Price")
|
77
|
+
fieldTable.setFieldCaption("amount", "Amount")
|
78
|
+
fieldTable.setFieldCaption("score", "Score")
|
79
|
+
fieldTable.setFieldCaption("other", "Other")
|
80
|
+
|
81
|
+
fieldTable.setFieldFilter("price", 3)
|
82
|
+
fieldTable.setFieldFilter("score", HRecord.new(18))
|
83
|
+
|
84
|
+
fieldTable.setFieldDecorator("description", "Item: §arg§")
|
85
|
+
|
86
|
+
fieldTable.setFieldTotalizer("price", "P R I C E")
|
87
|
+
fieldTable.setFieldTotalizer("amount", "T O T A L")
|
88
|
+
fieldTable.setFieldTotalizer("score", "S C O R E")
|
89
|
+
fieldTable.addSummary("SUMMARY", "2.000 Euro")
|
90
|
+
|
91
|
+
for i in 0..5
|
92
|
+
(other = HRecord.new(i)).color = "green"
|
93
|
+
(amount = HRecord.new("`quantity * `price")).color = "yellow"
|
94
|
+
fieldTable.setIntoRecordByFieldName(i, "quantity", i)
|
95
|
+
fieldTable.setIntoRecordByFieldName(i, "description", "Product #{i}")
|
96
|
+
fieldTable.setIntoRecordByFieldName(i, "price", i)
|
97
|
+
fieldTable.setDataByFieldName(i, "amount", amount)
|
98
|
+
fieldTable.setIntoRecordByFieldName(i, "score", "`amount * 2")
|
99
|
+
fieldTable.setDataByFieldName(i, "other", other)
|
100
|
+
end
|
101
|
+
|
102
|
+
fieldTable.show()
|
103
|
+
fieldTable.allRows,fieldTable.allCols = true, true
|
104
|
+
fieldTable.decorator = true
|
105
|
+
fieldTable.show()
|
106
|
+
fieldTable.showTotalizers()
|
107
|
+
fieldTable.showSummary()
|
108
|
+
|
109
|
+
return fieldTable
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.test2
|
114
|
+
fieldTable = HSpreadFieldTable.test()
|
115
|
+
fieldTable.eachWithFieldName do |row|
|
116
|
+
row.each do |key, data|
|
117
|
+
p key, data
|
118
|
+
end
|
119
|
+
puts
|
120
|
+
end
|
121
|
+
return fieldTable
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
t1 = Time.now
|
127
|
+
HSpreadFieldTable.test()
|
128
|
+
#HSpreadFieldTable.test2()
|
129
|
+
p "... msecs. #{((Time.now - t1) * 1000).round(2)}"
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'hdb/hdb'
|
3
|
+
require "yaml"
|
4
|
+
|
5
|
+
class HDataLoader
|
6
|
+
|
7
|
+
def initialize(filename, connectionName = "default")
|
8
|
+
@filename = filename
|
9
|
+
@connectionName = connectionName
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def load
|
14
|
+
|
15
|
+
return unless File.file?(@filename)
|
16
|
+
@data = YAML.load_file(@filename)
|
17
|
+
oodb = HODB.new(connectionName: @connectionName)
|
18
|
+
@data.each do |modelName, record|
|
19
|
+
model = oodb.newHODB(modelName)
|
20
|
+
record.each do |recordName, recordValue|
|
21
|
+
model.create(recordValue)
|
22
|
+
end
|
23
|
+
model.writeAll
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def recordGenerator(tableName, record, min, max, overwrite = false)
|
29
|
+
|
30
|
+
@file = overwrite ? File.new(@filename, "w+") : File.new(@filename, "a+")
|
31
|
+
|
32
|
+
@file << "#{tableName}:\n"
|
33
|
+
for i in min...max
|
34
|
+
@file << " record_#{i}:\n"
|
35
|
+
record.each do |fieldName, fieldValue|
|
36
|
+
fieldValue = fieldValue.gsub('$', i.to_s)
|
37
|
+
@file << " #{fieldName}: '#{fieldValue}'\n"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
@file.close if(@file)
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
def addRecord(record, i)
|
46
|
+
@file = File.new(@filename, "a+")
|
47
|
+
@file << " record_#{i}:\n"
|
48
|
+
record.each do |fieldName, fieldValue|
|
49
|
+
fieldValue = fieldValue.gsub('$', i.to_s)
|
50
|
+
@file << " #{fieldName}: '#{fieldValue}'\n"
|
51
|
+
end
|
52
|
+
@file.close if(@file)
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def example(count = 10)
|
57
|
+
|
58
|
+
record = {id: '#default', name: 'name-$', name_d: 'name_d_$', d: 'd_$'}
|
59
|
+
self.recordGenerator("d_tables", record, 1, count, true)
|
60
|
+
record = {id: '#default', name: 'name-$', name_a: 'name_a_$', a: 'a_$'}
|
61
|
+
self.recordGenerator("a_tables", record, 1, count)
|
62
|
+
record = {id: '#default', name: 'name-$', name_b: 'name_b-$', b: 'b-$', d_tables_id: '#$ % 5 + 1', a_tables_id: '$'}
|
63
|
+
self.recordGenerator("b_tables", record, 1, count)
|
64
|
+
record = {id: '#default', name: 'name-$', name_c: 'name_c-$', c: 'c-$', b_tables_id: '$'}
|
65
|
+
self.recordGenerator("c_tables", record, 1, count)
|
66
|
+
self.recordGenerator("name_table", {name: 'name-$'}, 1, count)
|
67
|
+
self.recordGenerator("surname_table", {surname: 'surname-$'}, 1, count)
|
68
|
+
self.recordGenerator("name_table_surname_table_join", {name_table_id: '#$', surname_table_id: '#$'}, 1, count)
|
69
|
+
self.addRecord({name_table_id: '#1', surname_table_id: '#2'}, 10)
|
70
|
+
self.addRecord({name_table_id: '#1', surname_table_id: '#3'}, 11)
|
71
|
+
self.load
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
data/lib/hdb/hdb.rb
ADDED
@@ -0,0 +1,357 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
def join(separator)
|
4
|
+
|
5
|
+
arr = []
|
6
|
+
self.each do |key, value|
|
7
|
+
arr << "\"#{key}\" = #{value}"
|
8
|
+
end
|
9
|
+
return arr.join(separator)
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
def intersect(hash)
|
14
|
+
|
15
|
+
self.select {|k,v| hash.include?(k)}
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
def hprint
|
20
|
+
|
21
|
+
hashView = self.dup
|
22
|
+
#'*ptr'
|
23
|
+
hashView.each { |k, v| hashView[k] = v.object_id if v.class != String and v.class != Fixnum and v.class != NilClass and v.class != Float }
|
24
|
+
puts hashView
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_js_format
|
29
|
+
result = []
|
30
|
+
self.each do |k, v|
|
31
|
+
tmp = (v.class <= String) ? "#{k}:#{v.to_js_format}" : "#{k}:#{v}"
|
32
|
+
result << tmp
|
33
|
+
end
|
34
|
+
return "{#{result.join(", ")}}"
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
class Array
|
41
|
+
|
42
|
+
def hjoin(separator, quoteChar = '"')
|
43
|
+
|
44
|
+
arr = []
|
45
|
+
self.each { |value| arr << "#{quoteChar}#{value}#{quoteChar}" }
|
46
|
+
return arr.join(separator)
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_js_format # used in HWidget::buildSignature
|
50
|
+
result = []
|
51
|
+
self.each do |value|
|
52
|
+
tmp = (value.class <= String) ? "#{value.to_js_format}" : value
|
53
|
+
result << tmp
|
54
|
+
end
|
55
|
+
return "[#{result.join(", ")}]"
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
class String
|
61
|
+
|
62
|
+
def hcapitalize
|
63
|
+
|
64
|
+
self.split('_').map(&:capitalize) * ''
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_js_format
|
69
|
+
return "'#{self.gsub("'", "\\\\'")}'"
|
70
|
+
end
|
71
|
+
|
72
|
+
def to_b
|
73
|
+
return self == "true"
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
class HDB
|
79
|
+
|
80
|
+
attr_reader :resultTable, :connection, :sth, :table
|
81
|
+
|
82
|
+
def initialize(host, port, dbname, user, password, timezone, connectionName = "default", connector = "Pg")
|
83
|
+
|
84
|
+
@host = host
|
85
|
+
@port = port
|
86
|
+
@dbname = dbname
|
87
|
+
@user = user
|
88
|
+
@password = password
|
89
|
+
@timezone = timezone
|
90
|
+
@connectionName = connectionName
|
91
|
+
|
92
|
+
@connection = nil
|
93
|
+
|
94
|
+
@select = nil
|
95
|
+
@from = nil
|
96
|
+
@where = nil
|
97
|
+
@orderBy = nil
|
98
|
+
@direction = nil
|
99
|
+
@limit = nil
|
100
|
+
@offset = nil
|
101
|
+
|
102
|
+
@resultTable = nil
|
103
|
+
@table = nil
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
def method_missing(methodeName, *args)
|
108
|
+
return eval("HODB.new($1, @connectionName).find_by_#{$2}(*args)") if methodeName.to_s =~ /^find_on_(.+)_by_(.+)$/
|
109
|
+
end
|
110
|
+
|
111
|
+
# posso passare anche un array di campi
|
112
|
+
def select(select)
|
113
|
+
select = select.hjoin(', ') if(select.class == Array)
|
114
|
+
@select = select
|
115
|
+
return self
|
116
|
+
end
|
117
|
+
def from(from)
|
118
|
+
from = from.hjoin(', ') if(from.class == Array)
|
119
|
+
@from = from
|
120
|
+
return self
|
121
|
+
end
|
122
|
+
def normalizeWhereFormat(where, operator = 'AND')
|
123
|
+
where = self.quote(where) if where.class == Hash
|
124
|
+
where = where.join(" #{operator} ") if(where.class == Array || where.class == Hash)
|
125
|
+
return where
|
126
|
+
end
|
127
|
+
def where(where, operator = 'AND')
|
128
|
+
@where = self.normalizeWhereFormat(where, operator)
|
129
|
+
return self
|
130
|
+
end
|
131
|
+
def orderBy(orderBy)
|
132
|
+
orderBy = orderBy.hjoin(', ') if(orderBy.class == Array)
|
133
|
+
@orderBy = orderBy
|
134
|
+
return self
|
135
|
+
end
|
136
|
+
def direction(direction)
|
137
|
+
@direction = direction
|
138
|
+
return self
|
139
|
+
end
|
140
|
+
def limit(limit)
|
141
|
+
@limit = limit
|
142
|
+
return self
|
143
|
+
end
|
144
|
+
def offset(offset)
|
145
|
+
@offset = offset
|
146
|
+
return self
|
147
|
+
end
|
148
|
+
|
149
|
+
def queryStr()
|
150
|
+
|
151
|
+
where = "WHERE #{@where}" if(@where)
|
152
|
+
orderBy = "ORDER BY #{@orderBy}" if(@orderBy)
|
153
|
+
limit = "LIMIT #{@limit}" if(@limit)
|
154
|
+
offset = "OFFSET #{@offset}" if(@offset)
|
155
|
+
return "SELECT #{@select} FROM #{@from} #{where} #{orderBy} #{@direction} #{limit} #{offset}"
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
def openConnection()
|
161
|
+
|
162
|
+
hl << "connectionName: #{@connectionName}".red
|
163
|
+
hl << "host: #{@host}".red
|
164
|
+
hl << "port: #{@port}".red
|
165
|
+
hl << "db: #{@dbname}".red
|
166
|
+
hl << "user: #{@user}".red
|
167
|
+
hl << "password: #{@password}".red
|
168
|
+
hl << "timezone: #{@timezone}".red
|
169
|
+
@connection = self.connect() unless @connection
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
|
174
|
+
def closeConnection()
|
175
|
+
|
176
|
+
self.disconnect() if @connection
|
177
|
+
@connection = nil
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
|
182
|
+
def execute(queryStr = self.queryStr, pageSize: "all", page: 0)
|
183
|
+
|
184
|
+
limit = "LIMIT #{pageSize}"
|
185
|
+
offset = "OFFSET #{page} * #{pageSize}"
|
186
|
+
if(pageSize == "all")
|
187
|
+
limit = offset = ""
|
188
|
+
end
|
189
|
+
|
190
|
+
queryStr += " #{limit} #{offset}"
|
191
|
+
|
192
|
+
t1 = Time.now
|
193
|
+
hl << queryStr.hight_yellow
|
194
|
+
result = self._execute(queryStr)
|
195
|
+
hl << "... msecs. #{((Time.now - t1) * 1000).round(2)}".hight_cyan
|
196
|
+
return result
|
197
|
+
|
198
|
+
end
|
199
|
+
|
200
|
+
def quoteValue(value)
|
201
|
+
|
202
|
+
return 'NULL' if value == nil
|
203
|
+
value = value.to_s.gsub("'", "''")
|
204
|
+
return (value[0] != '#') ? "'#{value}'" : value[1, value.size - 1]
|
205
|
+
|
206
|
+
end
|
207
|
+
|
208
|
+
def primitiveType?(value)
|
209
|
+
|
210
|
+
return (value.class == String or
|
211
|
+
value.class == Fixnum or
|
212
|
+
value.class == TrueClass or
|
213
|
+
value.class == FalseClass)
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
# quota tutti i valori tranne quelli che iniziano con #
|
218
|
+
# quindi se nella mia query devo richiamare una funzione basta farla precedere dal cancelletto
|
219
|
+
def quote(args)
|
220
|
+
|
221
|
+
return 'NULL' if args == nil
|
222
|
+
return self.quoteValue(args) if self.primitiveType?(args)
|
223
|
+
|
224
|
+
result = Hash.new()
|
225
|
+
|
226
|
+
args.each do |key, value|
|
227
|
+
result[key] = self.quoteValue(args[key])
|
228
|
+
end
|
229
|
+
return result
|
230
|
+
|
231
|
+
end
|
232
|
+
|
233
|
+
alias_method :q, :quote
|
234
|
+
|
235
|
+
def toClassName(tableName)
|
236
|
+
return tableName.hcapitalize()
|
237
|
+
end
|
238
|
+
|
239
|
+
def insertValues(args)
|
240
|
+
|
241
|
+
return "(id) values(default)" unless(args)
|
242
|
+
args = self.quote(args)
|
243
|
+
return "(#{args.keys.hjoin(', ')}) values(#{args.values.join(', ')})"
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
def insert(tableName, values)
|
248
|
+
|
249
|
+
return self.execute("INSERT INTO \"#{tableName}\" #{self.insertValues(values)} RETURNING id").data(0,"id")
|
250
|
+
|
251
|
+
end
|
252
|
+
|
253
|
+
def updateValues(args)
|
254
|
+
|
255
|
+
return "" unless(args)
|
256
|
+
args = self.quote(args)
|
257
|
+
result = []
|
258
|
+
args.each { |key, value| result << "\"#{key}\" = #{value}" }
|
259
|
+
return result.join(', ')
|
260
|
+
|
261
|
+
end
|
262
|
+
|
263
|
+
def update(tableName, values, where = "TRUE", operator = "AND")
|
264
|
+
|
265
|
+
where = where.join(" #{operator} ") if(where.class == Array || where.class == Hash)
|
266
|
+
self.execute("UPDATE \"#{tableName}\" SET #{self.updateValues(values)} WHERE #{where}")
|
267
|
+
return self.rowsAffected()
|
268
|
+
|
269
|
+
end
|
270
|
+
|
271
|
+
def delete(tableName, where = "TRUE", operator = "AND")
|
272
|
+
|
273
|
+
where = self.quote(where) if where.class == Hash
|
274
|
+
where = where.join(" #{operator} ") if(where.class == Array || where.class == Hash)
|
275
|
+
self.execute("DELETE FROM \"#{tableName}\" WHERE #{where}")
|
276
|
+
return self.rowsAffected() # rows affected
|
277
|
+
|
278
|
+
end
|
279
|
+
|
280
|
+
def rowCount()
|
281
|
+
|
282
|
+
return self.rowsAffected()
|
283
|
+
|
284
|
+
end
|
285
|
+
|
286
|
+
def columnCount()
|
287
|
+
|
288
|
+
return self.fieldNameList.length
|
289
|
+
|
290
|
+
end
|
291
|
+
|
292
|
+
def data(row, idOrFieldName)
|
293
|
+
|
294
|
+
return (idOrFieldName.class == Fixnum) ? @table[row][@table[row].keys[idOrFieldName]] : @table[row][idOrFieldName.to_s]
|
295
|
+
|
296
|
+
end
|
297
|
+
|
298
|
+
def show()
|
299
|
+
|
300
|
+
@table.each do |row|
|
301
|
+
p row
|
302
|
+
end
|
303
|
+
|
304
|
+
end
|
305
|
+
|
306
|
+
def self.newHDB(connectionName = "default")
|
307
|
+
|
308
|
+
params = hc.value(connectionName)
|
309
|
+
|
310
|
+
host = params["host"]
|
311
|
+
port = params["port"]
|
312
|
+
dbname = params["dbname"]
|
313
|
+
user = params["user"]
|
314
|
+
password = params["password"]
|
315
|
+
timezone = params["timezone"]
|
316
|
+
connector = params["connector"]
|
317
|
+
|
318
|
+
connector = connector.split('-')
|
319
|
+
|
320
|
+
if (connector[0] == "hdbi")
|
321
|
+
hdb = HDBI.new(host, port, dbname, user, password, timezone, connectionName, connector[1])
|
322
|
+
elsif (connector[0] == "hpgsql")
|
323
|
+
hdb = HPgSql.new(host, port, dbname, user, password, timezone, connectionName)
|
324
|
+
elsif (connector[0] == "hmysql")
|
325
|
+
hdb = HMySql.new(host, port, dbname, user, password, timezone, connectionName)
|
326
|
+
elsif (connector[0] == "hmysql2")
|
327
|
+
hdb = HMySql2.new(host, port, dbname, user, password, timezone, connectionName)
|
328
|
+
end
|
329
|
+
|
330
|
+
hdb.openConnection()
|
331
|
+
HSharedData.instance().setValue(hdb, "hdb-#{connectionName}")
|
332
|
+
return hdb
|
333
|
+
|
334
|
+
end
|
335
|
+
|
336
|
+
def self.HDB(connectionName = "default")
|
337
|
+
|
338
|
+
hdb = HSharedData.instance().value("hdb-#{connectionName}")
|
339
|
+
return (hdb) ? hdb : self.newHDB(connectionName)
|
340
|
+
|
341
|
+
end
|
342
|
+
|
343
|
+
def self.destroy(connectionName = "default")
|
344
|
+
|
345
|
+
self.HDB(connectionName).closeConnection()
|
346
|
+
HSharedData.instance().setValue(nil, "hdb-#{connectionName}")
|
347
|
+
|
348
|
+
end
|
349
|
+
|
350
|
+
end
|
351
|
+
|
352
|
+
def hdb(connectionName = "default")
|
353
|
+
|
354
|
+
return HDB.HDB(connectionName)
|
355
|
+
|
356
|
+
end
|
357
|
+
|