knjrbfw 0.0.3

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.
Files changed (208) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +32 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/Rakefile +49 -0
  8. data/VERSION +1 -0
  9. data/lib/knj/.gitignore +1 -0
  10. data/lib/knj/arrayext.rb +157 -0
  11. data/lib/knj/autoload/activesupport.rb +2 -0
  12. data/lib/knj/autoload/backups/facets_dictionary.rb +430 -0
  13. data/lib/knj/autoload/backups/parsedate.rb +53 -0
  14. data/lib/knj/autoload/backups/ping.rb +64 -0
  15. data/lib/knj/autoload/cinch.rb +2 -0
  16. data/lib/knj/autoload/erubis.rb +6 -0
  17. data/lib/knj/autoload/facebooker.rb +3 -0
  18. data/lib/knj/autoload/facets_dictionary.rb +7 -0
  19. data/lib/knj/autoload/gd2.rb +2 -0
  20. data/lib/knj/autoload/gettext.rb +9 -0
  21. data/lib/knj/autoload/gtk2.rb +5 -0
  22. data/lib/knj/autoload/json_autoload.rb +7 -0
  23. data/lib/knj/autoload/magick.rb +6 -0
  24. data/lib/knj/autoload/mysql.rb +6 -0
  25. data/lib/knj/autoload/parsedate.rb +1 -0
  26. data/lib/knj/autoload/ping.rb +64 -0
  27. data/lib/knj/autoload/rexml.rb +12 -0
  28. data/lib/knj/autoload/soap.rb +3 -0
  29. data/lib/knj/autoload/sqlite3.rb +6 -0
  30. data/lib/knj/autoload/tmail.rb +6 -0
  31. data/lib/knj/autoload/twitter.rb +2 -0
  32. data/lib/knj/autoload/xmlsimple.rb +6 -0
  33. data/lib/knj/autoload/zip.rb +6 -0
  34. data/lib/knj/autoload.rb +136 -0
  35. data/lib/knj/compiler.rb +53 -0
  36. data/lib/knj/cpufreq.rb +40 -0
  37. data/lib/knj/datarow.rb +256 -0
  38. data/lib/knj/datestamp.rb +91 -0
  39. data/lib/knj/datet.rb +448 -0
  40. data/lib/knj/degulesider.rb +46 -0
  41. data/lib/knj/erb/apache_knjerb.conf +8 -0
  42. data/lib/knj/erb/cache/README +1 -0
  43. data/lib/knj/erb/erb.rb +21 -0
  44. data/lib/knj/erb/erb_1.9.rb +13 -0
  45. data/lib/knj/erb/erb_cache_clean.rb +20 -0
  46. data/lib/knj/erb/erb_fcgi.rb +44 -0
  47. data/lib/knj/erb/erb_fcgi_1.9.rb +44 -0
  48. data/lib/knj/erb/erb_fcgi_jruby.rb +7 -0
  49. data/lib/knj/erb/erb_jruby.rb +22 -0
  50. data/lib/knj/erb/include.rb +248 -0
  51. data/lib/knj/errors.rb +19 -0
  52. data/lib/knj/eruby.rb +224 -0
  53. data/lib/knj/event_filemod.rb +53 -0
  54. data/lib/knj/event_handler.rb +69 -0
  55. data/lib/knj/exchangerates.rb +39 -0
  56. data/lib/knj/ext/webrick.rb +31 -0
  57. data/lib/knj/filesystem.rb +8 -0
  58. data/lib/knj/fs/drivers/filesystem.rb +14 -0
  59. data/lib/knj/fs/drivers/ftp.rb +33 -0
  60. data/lib/knj/fs/drivers/ssh.rb +28 -0
  61. data/lib/knj/fs/fs.rb +36 -0
  62. data/lib/knj/gettext_fallback.rb +17 -0
  63. data/lib/knj/gettext_threadded.rb +77 -0
  64. data/lib/knj/google_sitemap.rb +59 -0
  65. data/lib/knj/gtk2.rb +277 -0
  66. data/lib/knj/gtk2_cb.rb +85 -0
  67. data/lib/knj/gtk2_menu.rb +57 -0
  68. data/lib/knj/gtk2_statuswindow.rb +64 -0
  69. data/lib/knj/gtk2_tv.rb +63 -0
  70. data/lib/knj/hash_methods.rb +37 -0
  71. data/lib/knj/http.rb +190 -0
  72. data/lib/knj/includes/appserver_cli.rb +39 -0
  73. data/lib/knj/ip2location.rb +22 -0
  74. data/lib/knj/ironruby-gtk2/button.rb +19 -0
  75. data/lib/knj/ironruby-gtk2/dialog.rb +44 -0
  76. data/lib/knj/ironruby-gtk2/entry.rb +9 -0
  77. data/lib/knj/ironruby-gtk2/gdk_event.rb +3 -0
  78. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +13 -0
  79. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +11 -0
  80. data/lib/knj/ironruby-gtk2/gladexml.rb +104 -0
  81. data/lib/knj/ironruby-gtk2/glib.rb +15 -0
  82. data/lib/knj/ironruby-gtk2/gtk2.rb +148 -0
  83. data/lib/knj/ironruby-gtk2/gtk_builder.rb +31 -0
  84. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +5 -0
  85. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +19 -0
  86. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +5 -0
  87. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +18 -0
  88. data/lib/knj/ironruby-gtk2/gtk_menu.rb +5 -0
  89. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +7 -0
  90. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +8 -0
  91. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +24 -0
  92. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +16 -0
  93. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +19 -0
  94. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +32 -0
  95. data/lib/knj/ironruby-gtk2/iconsize.rb +3 -0
  96. data/lib/knj/ironruby-gtk2/image.rb +15 -0
  97. data/lib/knj/ironruby-gtk2/label.rb +19 -0
  98. data/lib/knj/ironruby-gtk2/stock.rb +4 -0
  99. data/lib/knj/ironruby-gtk2/tests/test.glade +15 -0
  100. data/lib/knj/ironruby-gtk2/tests/test_2.rb +22 -0
  101. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +47 -0
  102. data/lib/knj/ironruby-gtk2/vbox.rb +5 -0
  103. data/lib/knj/ironruby-gtk2/window.rb +23 -0
  104. data/lib/knj/jruby-gtk2/builder/test_builder.glade +43 -0
  105. data/lib/knj/jruby-gtk2/builder/test_builder.rb +19 -0
  106. data/lib/knj/jruby-gtk2/builder/test_builder.ui +43 -0
  107. data/lib/knj/jruby-gtk2/builder.rb +27 -0
  108. data/lib/knj/jruby-gtk2/cellrenderertext.rb +12 -0
  109. data/lib/knj/jruby-gtk2/checkbutton.rb +3 -0
  110. data/lib/knj/jruby-gtk2/combobox.rb +29 -0
  111. data/lib/knj/jruby-gtk2/dialog.rb +44 -0
  112. data/lib/knj/jruby-gtk2/eventbutton.rb +21 -0
  113. data/lib/knj/jruby-gtk2/gladexml.rb +99 -0
  114. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  115. data/lib/knj/jruby-gtk2/gtk2.rb +246 -0
  116. data/lib/knj/jruby-gtk2/hbox.rb +10 -0
  117. data/lib/knj/jruby-gtk2/iconsize.rb +5 -0
  118. data/lib/knj/jruby-gtk2/image.rb +10 -0
  119. data/lib/knj/jruby-gtk2/liststore.rb +56 -0
  120. data/lib/knj/jruby-gtk2/menu.rb +40 -0
  121. data/lib/knj/jruby-gtk2/progressbar.rb +12 -0
  122. data/lib/knj/jruby-gtk2/statusicon.rb +8 -0
  123. data/lib/knj/jruby-gtk2/stock.rb +8 -0
  124. data/lib/knj/jruby-gtk2/tests/test_glade_window.glade +163 -0
  125. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +47 -0
  126. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +17 -0
  127. data/lib/knj/jruby-gtk2/tests/test_trayicon.png +0 -0
  128. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +18 -0
  129. data/lib/knj/jruby-gtk2/treeview.rb +105 -0
  130. data/lib/knj/jruby-gtk2/vbox.rb +12 -0
  131. data/lib/knj/jruby-gtk2/window.rb +11 -0
  132. data/lib/knj/jruby_compiler.rb +14 -0
  133. data/lib/knj/knj.rb +19 -0
  134. data/lib/knj/knj_controller.rb +13 -0
  135. data/lib/knj/knjdb/dbtime.rb +30 -0
  136. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +327 -0
  137. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +130 -0
  138. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +30 -0
  139. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +255 -0
  140. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +93 -0
  141. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +151 -0
  142. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +29 -0
  143. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +300 -0
  144. data/lib/knj/knjdb/libknjdb.rb +438 -0
  145. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +83 -0
  146. data/lib/knj/knjdb/libknjdb_row.rb +149 -0
  147. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +69 -0
  148. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  149. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
  150. data/lib/knj/libqt.rb +75 -0
  151. data/lib/knj/libqt_window.rb +10 -0
  152. data/lib/knj/locale_strings.rb +3 -0
  153. data/lib/knj/locales.rb +54 -0
  154. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +56 -0
  155. data/lib/knj/mail.rb +75 -0
  156. data/lib/knj/mailobj.rb +82 -0
  157. data/lib/knj/mount.rb +115 -0
  158. data/lib/knj/notify.rb +13 -0
  159. data/lib/knj/nvidia_settings.rb +45 -0
  160. data/lib/knj/objects.rb +731 -0
  161. data/lib/knj/opts.rb +38 -0
  162. data/lib/knj/os.rb +158 -0
  163. data/lib/knj/php.rb +717 -0
  164. data/lib/knj/php_parser/arguments.rb +5 -0
  165. data/lib/knj/php_parser/functions.rb +97 -0
  166. data/lib/knj/php_parser/php_parser.rb +99 -0
  167. data/lib/knj/php_parser/tests/test.rb +12 -0
  168. data/lib/knj/php_parser/tests/test_function.php +8 -0
  169. data/lib/knj/php_parser/tests/test_function_run.rb +19 -0
  170. data/lib/knj/power_manager.rb +31 -0
  171. data/lib/knj/rand.rb +10 -0
  172. data/lib/knj/retry.rb +71 -0
  173. data/lib/knj/rhodes/mutex.rb +11 -0
  174. data/lib/knj/rhodes/rhodes.js +3 -0
  175. data/lib/knj/rhodes/rhodes.rb +11 -0
  176. data/lib/knj/rsvgbin.rb +20 -0
  177. data/lib/knj/scripts/degulesider.rb +12 -0
  178. data/lib/knj/scripts/filesearch.rb +51 -0
  179. data/lib/knj/scripts/ip2location.rb +12 -0
  180. data/lib/knj/scripts/keepalive.rb +6 -0
  181. data/lib/knj/scripts/svn_merge.rb +29 -0
  182. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +41 -0
  183. data/lib/knj/sms.rb +54 -0
  184. data/lib/knj/sshrobot/sshrobot.rb +93 -0
  185. data/lib/knj/strings.rb +65 -0
  186. data/lib/knj/sysuser.rb +27 -0
  187. data/lib/knj/tests/compiler/compiler_test.rb +13 -0
  188. data/lib/knj/tests/compiler/compiler_test_file.rb +62 -0
  189. data/lib/knj/tests/test_degulesider.rb +11 -0
  190. data/lib/knj/tests/test_mount.rb +30 -0
  191. data/lib/knj/tests/test_retry.rb +30 -0
  192. data/lib/knj/thread.rb +32 -0
  193. data/lib/knj/thread2.rb +47 -0
  194. data/lib/knj/threadhandler.rb +130 -0
  195. data/lib/knj/threadpool.rb +177 -0
  196. data/lib/knj/translations.rb +139 -0
  197. data/lib/knj/unix_proc.rb +82 -0
  198. data/lib/knj/web.rb +932 -0
  199. data/lib/knj/webscripts/image.rhtml +82 -0
  200. data/lib/knj/win.rb +4 -0
  201. data/lib/knj/win_registry.rb +60 -0
  202. data/lib/knj/win_tightvnc.rb +127 -0
  203. data/lib/knj/x11vnc.rb +48 -0
  204. data/lib/knj/youtube.rb +38 -0
  205. data/lib/knjrbfw.rb +4 -0
  206. data/spec/knjrbfw_spec.rb +269 -0
  207. data/spec/spec_helper.rb +12 -0
  208. metadata +336 -0
@@ -0,0 +1,255 @@
1
+ class KnjDB_mysql::Tables
2
+ attr_reader :db, :driver
3
+ attr_accessor :list
4
+
5
+ def initialize(args)
6
+ @args = args
7
+ @db = @args[:db]
8
+ @driver = @args[:driver]
9
+ @subtype = @db.opts[:subtype]
10
+ @list_mutex = Mutex.new
11
+ end
12
+
13
+ def [](table_name)
14
+ list = self.list
15
+ return list[table_name.to_s] if list[table_name.to_s]
16
+ raise Knj::Errors::NotFound.new("Table was not found: #{table_name}.")
17
+ end
18
+
19
+ def list
20
+ if !@list
21
+ @list_mutex.synchronize do
22
+ list = {}
23
+ @db.q("SHOW TABLE STATUS") do |d_tables|
24
+ if @subtype == "java"
25
+ d_tables = {
26
+ :Name => d_tables[:TABLE_NAME],
27
+ :Engine => d_tables[:ENGINE],
28
+ :Version => d_tables[:VERSION],
29
+ :Row_format => d_tables[:ROW_FORMAT],
30
+ :Rows => d_tables[:TABLE_ROWS],
31
+ :Avg_row_length => d_tables[:AVG_ROW_LENGTH],
32
+ :Data_length => d_tables[:DATA_LENGTH],
33
+ :Max_data_length => d_tables[:MAX_DATA_LENGTH],
34
+ :Index_length => d_tables[:INDEX_LENGTH],
35
+ :Data_free => d_tables[:DATA_FREE],
36
+ :Auto_increment => d_tables[:AUTO_INCREMENT],
37
+ :Create_time => d_tables[:CREATE_TIME],
38
+ :Update_time => d_tables[:UPDATE_TIME],
39
+ :Check_time => d_tables[:CHECK_TIME],
40
+ :Collation => d_tables[:TABLE_COLLATION],
41
+ :Checksum => d_tables[:CHECKSUM],
42
+ :Create_options => d_tables[:CREATE_OPTIONS],
43
+ :Comment => d_tables[:TABLE_COMMENT]
44
+ }
45
+ end
46
+
47
+ list[d_tables[:Name]] = KnjDB_mysql::Tables::Table.new(
48
+ :db => @db,
49
+ :driver => @driver,
50
+ :data => d_tables,
51
+ :tables => self
52
+ )
53
+ end
54
+
55
+ @list = list
56
+ end
57
+ end
58
+
59
+ return @list
60
+ end
61
+
62
+ def create(name, data)
63
+ raise "No columns was given for '#{name}'." if !data["columns"] or data["columns"].empty?
64
+
65
+ sql = "CREATE TABLE `#{name}` ("
66
+
67
+ first = true
68
+ data["columns"].each do |col_data|
69
+ sql += ", " if !first
70
+ first = false if first
71
+ col_data.delete("after") if col_data["after"]
72
+ sql += @db.cols.data_sql(col_data)
73
+ end
74
+
75
+ sql += ")"
76
+
77
+ @db.query(sql)
78
+ @list = nil
79
+
80
+ if data["indexes"]
81
+ table_obj = self[name]
82
+ table_obj.create_indexes(data["indexes"])
83
+ end
84
+ end
85
+ end
86
+
87
+ class KnjDB_mysql::Tables::Table
88
+ attr_accessor :list
89
+
90
+ def initialize(args)
91
+ @args = args
92
+ @db = args[:db]
93
+ @driver = args[:driver]
94
+ @data = args[:data]
95
+ @subtype = @db.opts[:subtype]
96
+
97
+ raise "Could not figure out name." if !@data[:Name]
98
+ end
99
+
100
+ def name
101
+ return @data[:Name]
102
+ end
103
+
104
+ def drop
105
+ sql = "DROP TABLE `#{self.name}`"
106
+ @db.query(sql)
107
+ end
108
+
109
+ def optimize
110
+ raise "stub!"
111
+ end
112
+
113
+ def column(name)
114
+ list = self.columns
115
+ return list[name] if list[name]
116
+ raise Knj::Errors::NotFound.new("Column not found: #{name}.")
117
+ end
118
+
119
+ def columns
120
+ if !@list
121
+ @db.cols
122
+ @list = {}
123
+ sql = "SHOW FULL COLUMNS FROM `#{self.name}`"
124
+
125
+ q_cols = @db.query(sql)
126
+ while d_cols = q_cols.fetch
127
+ if @subtype == "java"
128
+ d_cols = {
129
+ :Field => d_cols[:COLUMN_NAME],
130
+ :Type => d_cols[:COLUMN_TYPE],
131
+ :Collation => d_cols[:COLLATION_NAME],
132
+ :Null => d_cols[:IS_NULLABLE],
133
+ :Key => d_cols[:COLUMN_KEY],
134
+ :Default => d_cols[:COLUMN_DEFAULT],
135
+ :Extra => d_cols[:EXTRA],
136
+ :Privileges => d_cols[:PRIVILEGES],
137
+ :Comment => d_cols[:COLUMN_COMMENT]
138
+ }
139
+ end
140
+
141
+ @list[d_cols[:Field]] = KnjDB_mysql::Columns::Column.new(
142
+ :table => self,
143
+ :db => @db,
144
+ :driver => @driver,
145
+ :data => d_cols
146
+ )
147
+ end
148
+ end
149
+
150
+ return @list
151
+ end
152
+
153
+ def indexes
154
+ if !@indexes_list
155
+ @db.indexes
156
+ @indexes_list = {}
157
+
158
+ q_indexes = @db.query("SHOW INDEX FROM `#{self.name}`")
159
+ while d_indexes = q_indexes.fetch
160
+ if @subtype == "java"
161
+ d_indexes = {
162
+ :Table => d_indexes[:TABLE_NAME],
163
+ :Non_unique => d_indexes[:NON_UNIQUE],
164
+ :Key_name => d_indexes[:INDEX_NAME],
165
+ :Seq_in_index => d_indexes[:SEQ_IN_INDEX],
166
+ :Column_name => d_indexes[:COLUMN_NAME],
167
+ :Collation => d_indexes[:COLLATION],
168
+ :Cardinality => d_indexes[:CARDINALITY],
169
+ :Sub_part => d_indexes[:SUB_PART],
170
+ :Packed => d_indexes[:PACKED],
171
+ :Null => d_indexes[:NULLABLE],
172
+ :Index_type => d_indexes[:INDEX_TYPE],
173
+ :Comment => d_indexes[:COMMENT]
174
+ }
175
+ end
176
+
177
+ next if d_indexes[:Key_name] == "PRIMARY"
178
+
179
+ if !@indexes_list[d_indexes[:Key_name]]
180
+ @indexes_list[d_indexes[:Key_name]] = KnjDB_mysql::Indexes::Index.new(
181
+ :table => self,
182
+ :db => @db,
183
+ :driver => @driver,
184
+ :data => d_indexes
185
+ )
186
+ end
187
+
188
+ @indexes_list[d_indexes[:Key_name]].columns << d_indexes[:Column_name]
189
+ end
190
+ end
191
+
192
+ return @indexes_list
193
+ end
194
+
195
+ def index(name)
196
+ list = self.indexes
197
+ return list[name] if list[name]
198
+ raise Knj::Errors::NotFound.new("Index not found: #{name}.")
199
+ end
200
+
201
+ def create_columns(col_arr)
202
+ col_arr.each do |col_data|
203
+ sql = "ALTER TABLE `#{self.name}` ADD COLUMN #{@db.cols.data_sql(col_data)};"
204
+ @db.query(sql)
205
+ end
206
+ end
207
+
208
+ def create_indexes(index_arr)
209
+ index_arr.each do |index_data|
210
+ raise "No name was given." if !index_data.has_key?("name") or index_data["name"].strip.length <= 0
211
+ raise "No columns was given on index #{index_data["name"]}." if index_data["columns"].empty?
212
+
213
+ sql = "CREATE INDEX #{@db.escape_col}#{@db.esc_col(index_data["name"])}#{@db.escape_col} ON #{@db.escape_table}#{@db.esc_table(self.name)}#{@db.escape_table} ("
214
+
215
+ first = true
216
+ index_data["columns"].each do |col_name|
217
+ sql += ", " if !first
218
+ first = false if first
219
+
220
+ sql += "#{@db.escape_col}#{@db.esc_col(col_name)}#{@db.escape_col}"
221
+ end
222
+
223
+ sql += ")"
224
+
225
+ print sql + "\n"
226
+ @db.query(sql)
227
+ end
228
+ end
229
+
230
+ def rename(newname)
231
+ oldname = self.name
232
+ @db.query("ALTER TABLE `#{oldname}` RENAME TO `#{newname}`")
233
+ @args[:tables].list[newname] = self
234
+ @args[:tables].list.delete(oldname)
235
+ @data[:Name] = newname
236
+ end
237
+
238
+ def data
239
+ ret = {
240
+ "name" => name,
241
+ "columns" => [],
242
+ "indexes" => []
243
+ }
244
+
245
+ columns.each do |name, column|
246
+ ret["columns"] << column.data
247
+ end
248
+
249
+ indexes.each do |name, index|
250
+ ret["indexes"] << index.data if name != "PRIMARY"
251
+ end
252
+
253
+ return ret
254
+ end
255
+ end
@@ -0,0 +1,93 @@
1
+ class KnjDB_sqlite3
2
+ attr_reader :knjdb, :conn, :escape_table, :escape_col, :escape_val, :esc_table, :esc_col, :symbolize
3
+ attr_accessor :tables, :cols, :indexes
4
+
5
+ def initialize(knjdb_ob)
6
+ @escape_table = "`"
7
+ @escape_col = "`"
8
+ @escape_val = "'"
9
+ @esc_table = "`"
10
+ @esc_col = "`"
11
+
12
+ @knjdb = knjdb_ob
13
+ @path = @knjdb.opts[:path] if @knjdb.opts[:path]
14
+ @path = @knjdb.opts["path"] if @knjdb.opts["path"]
15
+ @symbolize = true if !@knjdb.opts.has_key?(:return_keys) or @knjdb.opts[:return_keys] == "symbols"
16
+
17
+ raise "No path was given." if !@path
18
+
19
+ if @knjdb.opts[:subtype] == "rhodes"
20
+ @conn = SQLite3::Database.new(@path, @path)
21
+ else
22
+ @conn = SQLite3::Database.open(@path)
23
+ @conn.results_as_hash = true
24
+ @conn.type_translation = false
25
+ end
26
+ end
27
+
28
+ def query(string)
29
+ begin
30
+ if @knjdb.opts[:subtype] == "rhodes"
31
+ res = @conn.execute(string, string)
32
+ else
33
+ res = @conn.execute(string)
34
+ end
35
+ rescue Exception => e
36
+ print "SQL: #{string}\n"
37
+ raise e
38
+ end
39
+
40
+ return KnjDB_sqlite3_result.new(self, res)
41
+ end
42
+
43
+ def escape(string)
44
+ #This code is taken directly from the documentation so we dont have to rely on the SQLite3::Database class. This way it can also be used with JRuby and IronRuby...
45
+ #http://sqlite-ruby.rubyforge.org/classes/SQLite/Database.html
46
+ return string.to_s.gsub(/'/, "''")
47
+ end
48
+
49
+ def esc_col(string)
50
+ string = string.to_s
51
+ raise "Invalid column-string: #{string}" if string.index(@escape_col) != nil
52
+ return string
53
+ end
54
+
55
+ alias :esc_table :esc_col
56
+ alias :esc :escape
57
+
58
+ def lastID
59
+ return @conn.last_insert_row_id if @conn.respond_to?(:last_insert_row_id)
60
+ return self.query("SELECT last_insert_rowid() AS id").fetch[:id].to_i
61
+ end
62
+
63
+ def close
64
+ @conn.close
65
+ end
66
+ end
67
+
68
+ class KnjDB_sqlite3_result
69
+ def initialize(driver, result_array)
70
+ @result_array = result_array
71
+ @index = 0
72
+ @retkeys = driver.knjdb.opts[:return_keys]
73
+ end
74
+
75
+ def fetch
76
+ tha_return = @result_array[@index]
77
+ return false if !tha_return
78
+ @index += 1
79
+
80
+ ret = {}
81
+ tha_return.each do |key, val|
82
+ if Knj::Php::is_numeric(key)
83
+ #do nothing.
84
+ elsif @retkeys == "symbols" and !key.is_a?(Symbol)
85
+ ret[key.to_sym] = val
86
+ else
87
+ ret[key] = val
88
+ end
89
+ end
90
+
91
+ return ret
92
+ end
93
+ end
@@ -0,0 +1,151 @@
1
+ class KnjDB_sqlite3::Columns
2
+ attr_reader :db, :driver
3
+
4
+ def initialize(args)
5
+ @args = args
6
+ @db = @args[:db]
7
+ @driver = @args[:driver]
8
+ end
9
+
10
+ def data_sql(data)
11
+ raise "No type given." if !data["type"]
12
+ type = data["type"]
13
+
14
+ data["maxlength"] = 255 if type == "varchar" and !data.has_key?("maxlength")
15
+ type = "integer" if @db.int_types.index(type) and (data["autoincr"] or data["primarykey"])
16
+
17
+ sql = "`#{data["name"]}` #{type}"
18
+ sql += "(#{data["maxlength"]})" if data["maxlength"] and !data["autoincr"]
19
+ sql += "(11)" if !data.has_key?("maxlength") and !data["autoincr"]
20
+ sql += " PRIMARY KEY" if data["primarykey"]
21
+ sql += " NOT NULL" if !data["null"] and data.has_key?("null")
22
+
23
+ if data.has_key?("default_func")
24
+ sql += " DEFAULT #{data["default_func"]}"
25
+ elsif data.has_key?("default") and data["default"] != false
26
+ sql += " DEFAULT '#{@driver.escape(data["default"])}'"
27
+ end
28
+
29
+ sql += " COMMENT '#{@driver.escape(data["comment"])}'" if data.has_key?("comment")
30
+
31
+ return sql
32
+ end
33
+ end
34
+
35
+ class KnjDB_sqlite3::Columns::Column
36
+ attr_reader :args
37
+
38
+ def initialize(args)
39
+ @args = args
40
+ @db = @args[:db]
41
+ end
42
+
43
+ def name
44
+ return @args[:data][:name]
45
+ end
46
+
47
+ def table
48
+ return @args[:table]
49
+ end
50
+
51
+ def data
52
+ return {
53
+ "type" => self.type,
54
+ "name" => self.name,
55
+ "null" => self.null?,
56
+ "maxlength" => self.maxlength,
57
+ "default" => self.default,
58
+ "primarykey" => self.primarykey?,
59
+ "autoincr" => self.autoincr?
60
+ }
61
+ end
62
+
63
+ def type
64
+ if !@type
65
+ if match = @args[:data][:type].match(/^([A-z]+)$/)
66
+ @maxlength = false
67
+ type = match[0]
68
+ elsif match = @args[:data][:type].match(/^decimal\((\d+),(\d+)\)$/)
69
+ @maxlength = "#{match[1]},#{match[2]}"
70
+ type = "decimal"
71
+ elsif match = @args[:data][:type].match(/^enum\((.+)\)$/)
72
+ @maxlength = match[1]
73
+ type = "enum"
74
+ elsif match = @args[:data][:type].match(/^(.+)\((\d+)\)$/)
75
+ @maxlength = match[2]
76
+ type = match[1]
77
+ end
78
+
79
+ if type == "integer"
80
+ @type = "int"
81
+ else
82
+ @type = type
83
+ end
84
+ end
85
+
86
+ return @type
87
+ end
88
+
89
+ def null?
90
+ return false if @args[:data][:notnull].to_i == 1
91
+ return true
92
+ end
93
+
94
+ def maxlength
95
+ self.type
96
+ return @maxlength if @maxlength
97
+ return false
98
+ end
99
+
100
+ def default
101
+ def_val = @args[:data][:dflt_value]
102
+ if def_val.to_s.slice(0..0) == "'"
103
+ def_val = def_val.to_s.slice(0)
104
+ end
105
+
106
+ if def_val.to_s.slice(-1..-1) == "'"
107
+ def_val = def_val.to_s.slice(0, def_val.length - 1)
108
+ end
109
+
110
+ return false if @args[:data][:dflt_value].to_s.length == 0
111
+ return def_val
112
+ end
113
+
114
+ def primarykey?
115
+ return true if @args[:data][:name] == "id"
116
+ return false if @args[:data][:pk].to_i == 0
117
+ return true
118
+ end
119
+
120
+ def autoincr?
121
+ return true if @args[:data][:name] == "id"
122
+ return true if @args[:data][:pk].to_i >= 1
123
+ return false
124
+ end
125
+
126
+ def drop
127
+ @args[:table].copy(
128
+ "drops" => self.name
129
+ )
130
+ end
131
+
132
+ def change(data)
133
+ newdata = data.clone
134
+
135
+ newdata["name"] = self.name if !newdata.has_key?("name")
136
+ newdata["type"] = self.type if !newdata.has_key?("type")
137
+ newdata["maxlength"] = self.maxlength if !newdata.has_key?("maxlength") and self.maxlength
138
+ newdata["null"] = self.null? if !newdata.has_key?("null")
139
+ newdata["default"] = self.default if !newdata.has_key?("default")
140
+ newdata.delete("primarykey") if newdata.has_key?("primarykey")
141
+
142
+ @type = nil
143
+ @maxlength = nil
144
+
145
+ new_table = self.table.copy(
146
+ "alter_columns" => {
147
+ self.name.to_s => newdata
148
+ }
149
+ )
150
+ end
151
+ end
@@ -0,0 +1,29 @@
1
+ class KnjDB_sqlite3::Indexes
2
+ def initialize(args)
3
+ @args = args
4
+ end
5
+ end
6
+
7
+ class KnjDB_sqlite3::Indexes::Index
8
+ attr_reader :columns
9
+
10
+ def initialize(args)
11
+ @args = args
12
+ @columns = []
13
+ end
14
+
15
+ def name
16
+ return @args[:data][:name]
17
+ end
18
+
19
+ def drop
20
+ @args[:db].query("DROP INDEX `#{self.name}`")
21
+ end
22
+
23
+ def data
24
+ return {
25
+ "name" => name,
26
+ "columns" => @columns
27
+ }
28
+ end
29
+ end