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
data/lib/hdb/hdb_test.rb
ADDED
@@ -0,0 +1,248 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'hdb/hdbi.rb'
|
3
|
+
|
4
|
+
class HODB
|
5
|
+
|
6
|
+
def self.test_1
|
7
|
+
contacts = Contacts.new
|
8
|
+
contacts.create({surname: 'Bonaffini',
|
9
|
+
name: 'Herbert',
|
10
|
+
address: 'Herbert Strasse',
|
11
|
+
delivery_address: 'Herbert - Delivery',
|
12
|
+
invoice_address: 'Herbert - Invoice'})
|
13
|
+
contacts.show('hight_red', false)
|
14
|
+
contacts.writeAll
|
15
|
+
contacts.all
|
16
|
+
contacts.show('hight_yellow', false)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.test_2
|
20
|
+
suppliers = Suppliers.new
|
21
|
+
suppliers.create({surname: 'Viola',
|
22
|
+
name: 'Ugo',
|
23
|
+
address: 'Viola Strasse',
|
24
|
+
delivery_address: 'Viola - Delivery',
|
25
|
+
invoice_address: 'Viola - Invoice',
|
26
|
+
company_name: 'VIOLA SPA'})
|
27
|
+
suppliers.show('hight_cyan', false)
|
28
|
+
suppliers.writeAll
|
29
|
+
suppliers.all
|
30
|
+
suppliers.show('hight_cyan', false)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.test_3
|
34
|
+
|
35
|
+
suppliers = Suppliers.new
|
36
|
+
supplier = suppliers.findBy_name_and_surname("Mario", "Rossi")
|
37
|
+
supplier.show
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.test_4
|
42
|
+
foods = Foods.new
|
43
|
+
foods.all
|
44
|
+
foods.each do |record|
|
45
|
+
p record.name
|
46
|
+
p record.categories_id.name
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.test_showCategories
|
52
|
+
|
53
|
+
categories = Categories.new
|
54
|
+
categories.all
|
55
|
+
categories.show
|
56
|
+
categories.each do |record|
|
57
|
+
p record.name
|
58
|
+
record.foods_table.show # polimorfismo runtime
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.oneToMany
|
64
|
+
|
65
|
+
printers = Printers.new
|
66
|
+
kitchen = printers.create({name: 'KITCHEN'})
|
67
|
+
pizzeria = printers.create({name: 'PIZZERIA'})
|
68
|
+
bar = printers.create({name: 'BAR'})
|
69
|
+
|
70
|
+
categories = Categories.new
|
71
|
+
pizze = categories.create({name: 'PIZZE BABY'}).foods_table
|
72
|
+
primi = categories.create({name: 'PRIMI BABY'})
|
73
|
+
beverage = categories.create({name: 'BEVERAGE'}).foods_table
|
74
|
+
|
75
|
+
pizze.create({name: 'Margherita Baby', description: 'Pomodoro, Mozzarella, Basilico', price: 10, printers_id: pizzeria})
|
76
|
+
pizze.create({name: 'Marinara Baby', description: 'Pomodoro, Aglio, Olio', price: 10, printers_id: pizzeria})
|
77
|
+
pizze.create({name: 'Capricciosa Baby', description: 'Pomodoro, Mozzarella, Funghi, Olive, Uovo, Piselli, Wurstell', price: 10, printers_id: pizzeria})
|
78
|
+
pizze.create({name: 'Capricciosa Baby', description: 'Pomodoro, Mozzarella, Funghi, Olive, Uovo, Piselli, Wurstell', price: 10, printers_id: pizzeria})
|
79
|
+
pizze.create({name: 'Napoli Baby', description: 'Pomodoro, Mozzarella, Acciughe', price: 10, printers_id: pizzeria})
|
80
|
+
pizze.create({name: 'Taggiasca Baby', description: 'Pomodoro, Mozzarella, Olive', price: 10, printers_id: pizzeria})
|
81
|
+
|
82
|
+
primi.foods_table.create({name: 'Tagliatelle ai Porcini', description: 'Fresh Mushrooms', price: 10, printers_id: kitchen})
|
83
|
+
|
84
|
+
primi.name = "PRIMI ITALIANI"
|
85
|
+
|
86
|
+
beverage.create({name: 'Coke', description: 'Water and Sugar', price: 2, printers_id: bar})
|
87
|
+
|
88
|
+
categories.writeAll
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.oneToOne
|
93
|
+
|
94
|
+
margherita = Foods.new.findBy_name("Margherita Baby")
|
95
|
+
margherita.printers_id.show # oneToOne
|
96
|
+
margherita.categories_id.show # manyToOne
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.manyToMany
|
101
|
+
|
102
|
+
models = Models.new
|
103
|
+
baby = models.create({name: 'Baby Format', description: 'baby format'})
|
104
|
+
family = models.create({name: 'Family Format', description: 'family format'})
|
105
|
+
|
106
|
+
categories = Categories.new
|
107
|
+
konditorei = categories.create({name: 'KONDITOREI'}).foods_table
|
108
|
+
sacher = konditorei.create({name: 'Sacher Torte', description: 'schokolade und marmelade', price: 10})
|
109
|
+
|
110
|
+
sacher_modelds_join = sacher.models_join
|
111
|
+
|
112
|
+
sacher_modelds_join.create({models_id: baby})
|
113
|
+
sacher_modelds_join.create({models_id: family})
|
114
|
+
|
115
|
+
categories.writeAll
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.manyToMany_2
|
120
|
+
|
121
|
+
sacher = Foods.new.findBy_name("Sacher Torte")
|
122
|
+
sacher.models_join.rightModel.show
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
def self.manyToMany_3
|
127
|
+
|
128
|
+
family = Models.new.findBy_name("Family Format")
|
129
|
+
|
130
|
+
margherita = Foods.new.findBy_name("Margherita Baby")
|
131
|
+
margherita_models_join = margherita.models_join
|
132
|
+
margherita_models_join.create({models_id: family})
|
133
|
+
|
134
|
+
# margherita.writeAll non funzionerebbe perche' non proviene da una create
|
135
|
+
# la writeAll deve quindi essere eseguita dalla create radice in questo caso margherita_models_join
|
136
|
+
margherita_models_join.writeAll
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.test_save
|
141
|
+
|
142
|
+
pizze = Categories.new.findBy_name("PIZZE").foods_table
|
143
|
+
pizze.create({name: 'Diavola', description: 'Pomodoro, Mozzarella, Salamino e Peperoncino', price: 10})
|
144
|
+
pizze.each do |pizza|
|
145
|
+
pizza.price = 1 #Random.rand(10)
|
146
|
+
pizza.printers_id = 1
|
147
|
+
end
|
148
|
+
#pizze.show
|
149
|
+
pizze.writeAll
|
150
|
+
pizze.saveAll
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
def self.test_save2
|
155
|
+
|
156
|
+
capricciosa = Foods.new.findBy_name("Capricciosa")
|
157
|
+
capricciosa.printers_id.name = "pizzeria"
|
158
|
+
#capricciosa.show
|
159
|
+
capricciosa.saveAll
|
160
|
+
|
161
|
+
|
162
|
+
puts "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§".red
|
163
|
+
pizze = Categories.new.findBy_name("PIZZE")
|
164
|
+
pizze.foods_table.each do |pizza|
|
165
|
+
pizza.printers_id.name = "pippo"
|
166
|
+
end
|
167
|
+
#pizze.saveAll
|
168
|
+
pizze.ok
|
169
|
+
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
def self.test_delete
|
174
|
+
|
175
|
+
pizze = Categories.new.findBy_name("PIZZE").foods_table
|
176
|
+
|
177
|
+
rustica = pizze.create({name: 'Rustica', description: 'Pomodoro, Mozzarella, Olive', price: 10})
|
178
|
+
biancaneve = pizze.create({name: 'Biancaneve', description: 'Aglio, Olio', price: 10})
|
179
|
+
pizze.show
|
180
|
+
capricciosa = Foods.new.findBy_name("Capricciosa")
|
181
|
+
pizze.remove(rustica)
|
182
|
+
pizze.remove(capricciosa)
|
183
|
+
pizze.writeAll
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
# Ci sono diversi modi per creare dei campi virtuali
|
188
|
+
# Il primo e' quello di creare una funzione all'interno nel modello es. per creare il campo amount:
|
189
|
+
#
|
190
|
+
# self.amount_virtual = HField.magic()
|
191
|
+
#
|
192
|
+
# def amount
|
193
|
+
# return price.to_i * 2
|
194
|
+
# end
|
195
|
+
#
|
196
|
+
# In realta' se togliamo l'istruzione magic funziona lo stesso ma non si capisce che amount e' un campo del modello
|
197
|
+
#
|
198
|
+
# Il secondo e' quello di creare il campo fuori dal modello in modo da avere piu' versatilita'
|
199
|
+
# In tal modo posso aggiungere i campi runtime
|
200
|
+
#
|
201
|
+
# - products = Products.new
|
202
|
+
# - products.amount = HField.virtual(:amount, self) # dove amount e' la funzione e self e' l'oggetto contenente la funzione
|
203
|
+
#
|
204
|
+
# Il terzo e' quello di passare direttamente un blocco es.
|
205
|
+
#
|
206
|
+
# - products.amount = HField.virtual { |this| this.price.to_i }
|
207
|
+
|
208
|
+
def self.amount(this)
|
209
|
+
return this.quantity * this.price.to_i
|
210
|
+
end
|
211
|
+
|
212
|
+
def self.virtualFields
|
213
|
+
|
214
|
+
products = Products.new
|
215
|
+
products.quantity = HField.virtual { |this| this.categories_id.id.to_i }
|
216
|
+
products.amount = HField.virtual(:amount, HODB) # Secondo metodo ma passando il nome della classe essendo statica
|
217
|
+
#products.amount = HField.virtual { |this| this.quantity * this.price.to_i } # Terzo metodo
|
218
|
+
products.all
|
219
|
+
products.show("red", [:id, :quantity, :price, :amount, :score, :random])
|
220
|
+
|
221
|
+
end
|
222
|
+
|
223
|
+
def self.test
|
224
|
+
|
225
|
+
#HDBGenerator.new(true)
|
226
|
+
#self.test_save2
|
227
|
+
#self.virtualFields
|
228
|
+
#return
|
229
|
+
HDBGenerator.new(true)
|
230
|
+
self.test_1
|
231
|
+
self.test_2
|
232
|
+
self.test_3
|
233
|
+
self.test_4
|
234
|
+
self.oneToMany
|
235
|
+
self.oneToOne
|
236
|
+
self.manyToMany
|
237
|
+
self.manyToMany_2
|
238
|
+
self.manyToMany_3
|
239
|
+
self.test_showCategories
|
240
|
+
self.test_save
|
241
|
+
self.test_save2
|
242
|
+
self.virtualFields
|
243
|
+
#self.test_delete
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
end
|
@@ -0,0 +1,211 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'hdb/hdb'
|
3
|
+
|
4
|
+
class HDBGenerator
|
5
|
+
|
6
|
+
def newOdb(modelName)
|
7
|
+
className = modelName.hcapitalize
|
8
|
+
return eval("#{className}.new")
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(dropTables = false, connectionName = "default")
|
12
|
+
self.initModule("quickmanager", dropTables, connectionName)
|
13
|
+
return
|
14
|
+
HDir.new("#{Dir.pwd}/app/modules/*").onlyDirectories().each do |moduleName|
|
15
|
+
self.initModule(moduleName, dropTables, connectionName)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def initModule(moduleName, dropTables = false, connectionName = "default")
|
21
|
+
@moduleName = moduleName
|
22
|
+
@connectionName = connectionName
|
23
|
+
@dropTables = dropTables
|
24
|
+
|
25
|
+
databases = self.databases()
|
26
|
+
@dbTables = self.tables()
|
27
|
+
|
28
|
+
@htables = {} # hypersonic tables
|
29
|
+
for filename in Dir.glob("#{Dir.pwd}/app/modules/#{@moduleName}/*/*.rb") do
|
30
|
+
modelName = File.basename(filename).chomp('.rb')
|
31
|
+
@htables[modelName] = {}
|
32
|
+
self.createScaffoldTable(modelName)
|
33
|
+
end
|
34
|
+
|
35
|
+
@htables.each do |modelName, emptyHash|
|
36
|
+
oodb = self.newOdb(modelName)
|
37
|
+
emptyHash[:oodb] = oodb if oodb.generate
|
38
|
+
end
|
39
|
+
|
40
|
+
@htables.each { |modelName, oodb| self.dropTable(modelName) }
|
41
|
+
|
42
|
+
@dbTables = self.tables()
|
43
|
+
@htables.each { |modelName, oodb| self.createScaffoldTable(modelName) }
|
44
|
+
@htables.each do |modelName, oodb|
|
45
|
+
fields = self.fields(modelName)
|
46
|
+
hfields = oodb[:oodb].hfields(false)
|
47
|
+
|
48
|
+
fieldsToDrop = fields - hfields.keys - oodb[:oodb].systemFields().keys()
|
49
|
+
self.dropFields(modelName, fieldsToDrop)
|
50
|
+
|
51
|
+
self.before(modelName)
|
52
|
+
hfields.each do |fieldName, fieldAttrs|
|
53
|
+
hl << "#{modelName}.#{fieldName} #{fieldAttrs}"
|
54
|
+
|
55
|
+
next if fields.include?(fieldName)
|
56
|
+
next if (fieldAttrs[:type] == "oneToMany")
|
57
|
+
if (fieldAttrs[:type] == "manyToMany")
|
58
|
+
self.createTableManyToMany(modelName, fieldAttrs)
|
59
|
+
next
|
60
|
+
end
|
61
|
+
|
62
|
+
type = self.toType(fieldAttrs[:type])
|
63
|
+
self.addField(modelName,
|
64
|
+
fieldName,
|
65
|
+
type,
|
66
|
+
fieldAttrs[:constraint],
|
67
|
+
fieldAttrs[:default],
|
68
|
+
fieldAttrs[:modelNameReference],
|
69
|
+
fieldAttrs[:onDelete],
|
70
|
+
fieldAttrs[:onUpdate])
|
71
|
+
end
|
72
|
+
self.after(modelName)
|
73
|
+
end
|
74
|
+
|
75
|
+
@htables.each do |modelName, oodb|
|
76
|
+
self.dataLoader(modelName) if oodb[:generated]
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
def createScaffoldTable(modelName)
|
82
|
+
unless @dbTables.include?(modelName)
|
83
|
+
self.createTable(modelName)
|
84
|
+
self.addSystemFields(modelName)
|
85
|
+
@htables[modelName][:generated] = true
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def createTableManyToMany(modelName, fieldAttrs)
|
90
|
+
p fieldAttrs
|
91
|
+
type = self.toType(fieldAttrs[:type])
|
92
|
+
_modelName = fieldAttrs[:joinTable]
|
93
|
+
return if !@dropTables and @dbTables.include?(_modelName)
|
94
|
+
self.dropTable(_modelName)
|
95
|
+
self.createTable(_modelName)
|
96
|
+
self.addSystemFields(_modelName)
|
97
|
+
self.addField(_modelName, fieldAttrs[:referenceFieldName], type,
|
98
|
+
fieldAttrs[:constraint], fieldAttrs[:default], modelName)
|
99
|
+
self.addField(_modelName, fieldAttrs[:referenceFieldName2], type,
|
100
|
+
fieldAttrs[:constraint], fieldAttrs[:default], fieldAttrs[:modelNameReference])
|
101
|
+
end
|
102
|
+
|
103
|
+
def dropTable(modelName)
|
104
|
+
return unless @dbTables.include?(modelName)
|
105
|
+
return unless @dropTables
|
106
|
+
hdb(@connectionName).execute("DROP TABLE #{modelName} CASCADE")
|
107
|
+
@dbTables.delete(modelName)
|
108
|
+
end
|
109
|
+
|
110
|
+
def createTable(modelName)
|
111
|
+
return if @dbTables.include?(modelName)
|
112
|
+
hdb(@connectionName).execute("CREATE TABLE #{modelName} ()")
|
113
|
+
@dbTables << modelName
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
def addSystemFields(modelName)
|
118
|
+
self.addField(modelName, :id, 'SERIAL', 'PRIMARY KEY')
|
119
|
+
end
|
120
|
+
|
121
|
+
def before(modelName)
|
122
|
+
end
|
123
|
+
|
124
|
+
def after(modelName)
|
125
|
+
end
|
126
|
+
|
127
|
+
def disableTrigger(modelName)
|
128
|
+
@htables[modelName][:oodb].allParents().each do |parent|
|
129
|
+
hdb(@connectionName).execute("ALTER TABLE #{parent.modelName} DISABLE TRIGGER ALL")
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def enableTrigger(modelName)
|
134
|
+
@htables[modelName][:oodb].allParents().each do |parent|
|
135
|
+
hdb(@connectionName).execute("ALTER TABLE #{parent.modelName} ENABLE TRIGGER ALL")
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def dataLoader(modelName)
|
140
|
+
|
141
|
+
self.disableTrigger(modelName)
|
142
|
+
filename = "modules/#{@moduleName}/models/#{modelName}/default_data.yml"
|
143
|
+
HDataLoader.new(filename, @connectionName).load()
|
144
|
+
self.enableTrigger(modelName)
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
def dropFields(modelName, fields)
|
149
|
+
|
150
|
+
fields.each do |field|
|
151
|
+
self.dropField(modelName, field)
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
def dropField(modelName, fieldName)
|
157
|
+
hdb(@connectionName).execute("ALTER TABLE #{modelName} DROP COLUMN #{fieldName}")
|
158
|
+
end
|
159
|
+
|
160
|
+
def addField(modelName, fieldName, type, constraint = nil, default = nil, reference = nil, onDelete = nil, onUpdate = nil)
|
161
|
+
onDelete = " ON DELETE #{onDelete}" if onDelete
|
162
|
+
onUpdate = " ON UPDATE #{onUpdate}" if onUpdate
|
163
|
+
reference = " REFERENCES #{reference}(id)" if reference
|
164
|
+
constraint = " #{constraint}" if constraint != nil
|
165
|
+
default = " DEFAULT #{hdb.q(default)}" if default != nil # default could be false and so is correct default != nil
|
166
|
+
hdb(@connectionName).execute("ALTER TABLE #{modelName} ADD COLUMN #{fieldName} #{type}#{constraint}#{reference}#{onDelete}#{onUpdate}#{default}") if type
|
167
|
+
end
|
168
|
+
|
169
|
+
def toType(type)
|
170
|
+
|
171
|
+
toPgTypes = {
|
172
|
+
boolean: 'bool',
|
173
|
+
integer: 'int4',
|
174
|
+
float: 'real',
|
175
|
+
text: 'text',
|
176
|
+
html: 'text',
|
177
|
+
date: 'date',
|
178
|
+
datetime: 'timestamp',
|
179
|
+
binary: 'bytea',
|
180
|
+
oneToOne: 'int4',
|
181
|
+
manyToOne: 'int4',
|
182
|
+
oneToMany: 'int4',
|
183
|
+
manyToMany: 'int4',
|
184
|
+
serialized: 'text',
|
185
|
+
virtual: nil
|
186
|
+
}
|
187
|
+
return toPgTypes.include?(type.to_sym) ? toPgTypes[type.to_sym] : type
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
|
192
|
+
def databases
|
193
|
+
result = hdb(@connectionName).select(:datname).from(:pg_database).where({datistemplate: 'false'}).execute
|
194
|
+
return result.table.column(:datname)
|
195
|
+
end
|
196
|
+
|
197
|
+
def tables
|
198
|
+
result = hdb(@connectionName).select(:tablename).from(:pg_tables).where(["schemaname != 'pg_catalog'", "schemaname != 'information_schema'"]).execute
|
199
|
+
return result.table.column(:tablename)
|
200
|
+
end
|
201
|
+
|
202
|
+
# column_name, data_type, column_default, ordinal_position
|
203
|
+
def fields(modelName, fieldName = "column_name")
|
204
|
+
result = hdb(@connectionName).select(fieldName).from('information_schema.columns').where({table_name: modelName}).execute
|
205
|
+
return result.table if fieldName == "*"
|
206
|
+
return result.table.column(fieldName)
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
|