knjrbfw 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/VERSION +1 -1
  2. data/knjrbfw.gemspec +29 -8
  3. data/lib/knj/arrayext.rb +206 -153
  4. data/lib/knj/autoload/backups/ping.rb +2 -2
  5. data/lib/knj/autoload/erubis.rb +3 -3
  6. data/lib/knj/autoload/facets_dictionary.rb +2 -2
  7. data/lib/knj/autoload/gettext.rb +3 -3
  8. data/lib/knj/autoload/gtk2.rb +1 -1
  9. data/lib/knj/autoload/json.rb +14 -0
  10. data/lib/knj/autoload/magick.rb +3 -3
  11. data/lib/knj/autoload/mysql.rb +3 -3
  12. data/lib/knj/autoload/parsedate.rb +1 -1
  13. data/lib/knj/autoload/ping.rb +2 -2
  14. data/lib/knj/autoload/rexml.rb +5 -5
  15. data/lib/knj/autoload/soap.rb +1 -1
  16. data/lib/knj/autoload/sqlite3.rb +3 -3
  17. data/lib/knj/autoload/tmail.rb +3 -3
  18. data/lib/knj/autoload/xmlsimple.rb +3 -3
  19. data/lib/knj/autoload/zip.rb +3 -3
  20. data/lib/knj/autoload.rb +87 -81
  21. data/lib/knj/cmd_gen.rb +19 -19
  22. data/lib/knj/cmd_parser.rb +59 -0
  23. data/lib/knj/compiler.rb +34 -34
  24. data/lib/knj/cpufreq.rb +37 -37
  25. data/lib/knj/csv.rb +20 -0
  26. data/lib/knj/datarow.rb +406 -239
  27. data/lib/knj/datarow_custom.rb +124 -0
  28. data/lib/knj/datestamp.rb +89 -89
  29. data/lib/knj/datet.rb +550 -454
  30. data/lib/knj/db.rb +1 -0
  31. data/lib/knj/degulesider.rb +42 -44
  32. data/lib/knj/erb/erb.rb +5 -5
  33. data/lib/knj/erb/erb_cache_clean.rb +10 -10
  34. data/lib/knj/erb/erb_fcgi.rb +32 -32
  35. data/lib/knj/erb/erb_fcgi_1.9.rb +32 -32
  36. data/lib/knj/erb/erb_fcgi_jruby.rb +2 -2
  37. data/lib/knj/erb/erb_jruby.rb +5 -5
  38. data/lib/knj/erb/include.rb +243 -243
  39. data/lib/knj/errors.rb +19 -18
  40. data/lib/knj/eruby.rb +12 -10
  41. data/lib/knj/event_filemod.rb +31 -31
  42. data/lib/knj/event_handler.rb +73 -67
  43. data/lib/knj/exchangerates.rb +37 -37
  44. data/lib/knj/facebook_connect.rb +95 -18
  45. data/lib/knj/filesystem.rb +6 -6
  46. data/lib/knj/fs/drivers/filesystem.rb +12 -12
  47. data/lib/knj/fs/drivers/ftp.rb +31 -31
  48. data/lib/knj/fs/drivers/ssh.rb +26 -26
  49. data/lib/knj/fs/fs.rb +31 -31
  50. data/lib/knj/gettext_fallback.rb +15 -15
  51. data/lib/knj/gettext_threadded.rb +75 -75
  52. data/lib/knj/google_sitemap.rb +53 -53
  53. data/lib/knj/gtk2.rb +272 -272
  54. data/lib/knj/gtk2_cb.rb +80 -80
  55. data/lib/knj/gtk2_menu.rb +55 -55
  56. data/lib/knj/gtk2_statuswindow.rb +62 -62
  57. data/lib/knj/gtk2_tv.rb +58 -58
  58. data/lib/knj/hash_methods.rb +27 -36
  59. data/lib/knj/http.rb +189 -167
  60. data/lib/knj/http2.rb +259 -53
  61. data/lib/knj/image.rb +2 -2
  62. data/lib/knj/includes/appserver_cli.rb +18 -18
  63. data/lib/knj/includes/require_info.rb +15 -0
  64. data/lib/knj/ip2location.rb +20 -20
  65. data/lib/knj/ironruby-gtk2/button.rb +14 -14
  66. data/lib/knj/ironruby-gtk2/dialog.rb +42 -42
  67. data/lib/knj/ironruby-gtk2/entry.rb +4 -4
  68. data/lib/knj/ironruby-gtk2/gdk_event.rb +1 -1
  69. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +11 -11
  70. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +9 -9
  71. data/lib/knj/ironruby-gtk2/gladexml.rb +102 -102
  72. data/lib/knj/ironruby-gtk2/glib.rb +13 -13
  73. data/lib/knj/ironruby-gtk2/gtk2.rb +121 -121
  74. data/lib/knj/ironruby-gtk2/gtk_builder.rb +29 -29
  75. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +3 -3
  76. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +17 -17
  77. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +3 -3
  78. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +16 -16
  79. data/lib/knj/ironruby-gtk2/gtk_menu.rb +3 -3
  80. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +2 -2
  81. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +3 -3
  82. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +22 -22
  83. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +11 -11
  84. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +17 -17
  85. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +30 -30
  86. data/lib/knj/ironruby-gtk2/iconsize.rb +1 -1
  87. data/lib/knj/ironruby-gtk2/image.rb +13 -13
  88. data/lib/knj/ironruby-gtk2/label.rb +17 -17
  89. data/lib/knj/ironruby-gtk2/stock.rb +2 -2
  90. data/lib/knj/ironruby-gtk2/tests/test_2.rb +14 -14
  91. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +37 -37
  92. data/lib/knj/ironruby-gtk2/vbox.rb +3 -3
  93. data/lib/knj/ironruby-gtk2/window.rb +18 -18
  94. data/lib/knj/jruby-gtk2/builder/test_builder.rb +11 -11
  95. data/lib/knj/jruby-gtk2/builder.rb +25 -25
  96. data/lib/knj/jruby-gtk2/cellrenderertext.rb +10 -10
  97. data/lib/knj/jruby-gtk2/checkbutton.rb +1 -1
  98. data/lib/knj/jruby-gtk2/combobox.rb +27 -27
  99. data/lib/knj/jruby-gtk2/dialog.rb +40 -40
  100. data/lib/knj/jruby-gtk2/eventbutton.rb +19 -19
  101. data/lib/knj/jruby-gtk2/gladexml.rb +97 -97
  102. data/lib/knj/jruby-gtk2/gtk2.rb +203 -203
  103. data/lib/knj/jruby-gtk2/hbox.rb +8 -8
  104. data/lib/knj/jruby-gtk2/iconsize.rb +3 -3
  105. data/lib/knj/jruby-gtk2/image.rb +8 -8
  106. data/lib/knj/jruby-gtk2/liststore.rb +54 -54
  107. data/lib/knj/jruby-gtk2/menu.rb +35 -35
  108. data/lib/knj/jruby-gtk2/progressbar.rb +10 -10
  109. data/lib/knj/jruby-gtk2/statusicon.rb +3 -3
  110. data/lib/knj/jruby-gtk2/stock.rb +6 -6
  111. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +36 -36
  112. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +3 -3
  113. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +2 -2
  114. data/lib/knj/jruby-gtk2/treeview.rb +88 -88
  115. data/lib/knj/jruby-gtk2/vbox.rb +10 -10
  116. data/lib/knj/jruby-gtk2/window.rb +7 -7
  117. data/lib/knj/jruby_compiler.rb +12 -12
  118. data/lib/knj/knj.rb +12 -11
  119. data/lib/knj/knj_controller.rb +13 -8
  120. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +499 -316
  121. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +127 -125
  122. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +43 -25
  123. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +316 -241
  124. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +12 -0
  125. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +146 -146
  126. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +24 -24
  127. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +283 -283
  128. data/lib/knj/knjdb/libknjdb.rb +96 -52
  129. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +78 -78
  130. data/lib/knj/knjdb/libknjdb_row.rb +147 -147
  131. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +61 -61
  132. data/lib/knj/knjdb/revision.rb +262 -0
  133. data/lib/knj/libqt.rb +69 -69
  134. data/lib/knj/libqt_window.rb +8 -8
  135. data/lib/knj/locales.rb +62 -52
  136. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +54 -54
  137. data/lib/knj/mail.rb +73 -73
  138. data/lib/knj/mailobj.rb +82 -80
  139. data/lib/knj/mount.rb +113 -113
  140. data/lib/knj/notify.rb +11 -11
  141. data/lib/knj/nvidia_settings.rb +43 -43
  142. data/lib/knj/objects/objects_sqlhelper.rb +474 -0
  143. data/lib/knj/objects.rb +569 -793
  144. data/lib/knj/opts.rb +38 -38
  145. data/lib/knj/os.rb +176 -158
  146. data/lib/knj/php.rb +853 -683
  147. data/lib/knj/php_parser/arguments.rb +3 -3
  148. data/lib/knj/php_parser/functions.rb +95 -95
  149. data/lib/knj/php_parser/php_parser.rb +16 -16
  150. data/lib/knj/php_parser/tests/test.rb +6 -6
  151. data/lib/knj/php_parser/tests/test_function_run.rb +6 -6
  152. data/lib/knj/power_manager.rb +29 -29
  153. data/lib/knj/process.rb +457 -0
  154. data/lib/knj/process_meta.rb +400 -0
  155. data/lib/knj/rand.rb +8 -8
  156. data/lib/knj/retry.rb +69 -69
  157. data/lib/knj/rhodes/delegate.rb +414 -0
  158. data/lib/knj/rhodes/rhodes.rb +114 -40
  159. data/lib/knj/rhodes/weakref.rb +80 -0
  160. data/lib/knj/rsvgbin.rb +18 -18
  161. data/lib/knj/scripts/degulesider.rb +2 -2
  162. data/lib/knj/scripts/filesearch.rb +35 -35
  163. data/lib/knj/scripts/ip2location.rb +2 -2
  164. data/lib/knj/scripts/keepalive.rb +2 -2
  165. data/lib/knj/scripts/php_to_rb_helper.rb +376 -0
  166. data/lib/knj/scripts/process_meta_exec.rb +104 -0
  167. data/lib/knj/scripts/svn_merge.rb +21 -21
  168. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +26 -26
  169. data/lib/knj/sms.rb +52 -52
  170. data/lib/knj/sshrobot/sshrobot.rb +90 -88
  171. data/lib/knj/sshrobot.rb +1 -0
  172. data/lib/knj/strings.rb +186 -74
  173. data/lib/knj/sysuser.rb +25 -25
  174. data/lib/knj/table_writer.rb +97 -0
  175. data/lib/knj/tests/compiler/compiler_test.rb +2 -2
  176. data/lib/knj/tests/test_degulesider.rb +1 -1
  177. data/lib/knj/tests/test_http2_proxy.rb +26 -0
  178. data/lib/knj/tests/test_mount.rb +9 -9
  179. data/lib/knj/tests/test_retry.rb +17 -17
  180. data/lib/knj/thread.rb +23 -24
  181. data/lib/knj/thread2.rb +45 -45
  182. data/lib/knj/threadhandler.rb +135 -102
  183. data/lib/knj/threadpool.rb +195 -145
  184. data/lib/knj/translations.rb +128 -119
  185. data/lib/knj/unix_proc.rb +80 -80
  186. data/lib/knj/web.rb +947 -881
  187. data/lib/knj/webscripts/image.rhtml +142 -67
  188. data/lib/knj/win.rb +2 -2
  189. data/lib/knj/win_registry.rb +58 -58
  190. data/lib/knj/win_tightvnc.rb +125 -125
  191. data/lib/knj/wref.rb +104 -0
  192. data/lib/knj/x11vnc.rb +46 -46
  193. data/lib/knj/youtube.rb +33 -36
  194. data/lib/knjrbfw.rb +1 -0
  195. data/spec/cmd_parser_spec.rb +25 -0
  196. data/spec/db_spec.rb +40 -0
  197. data/spec/db_spec_encoding_test_file.txt +1 -0
  198. data/spec/http2_spec.rb +37 -0
  199. data/spec/knjrbfw_spec.rb +17 -15
  200. data/spec/php_spec.rb +69 -0
  201. data/spec/process_meta_spec.rb +150 -0
  202. data/spec/process_spec.rb +107 -0
  203. data/spec/strings_spec.rb +21 -0
  204. data/spec/web_spec.rb +16 -0
  205. metadata +42 -21
  206. data/lib/knj/autoload/json_autoload.rb +0 -7
  207. data/lib/knj/autoload/twitter.rb +0 -2
  208. data/lib/knj/ext/webrick.rb +0 -31
  209. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  210. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  211. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
@@ -1,234 +1,234 @@
1
1
  class KnjDB_sqlite3::Tables
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 [](table_name)
11
- list = self.list
12
- return list[table_name.to_s] if list[table_name.to_s]
13
- raise Knj::Errors::NotFound.new("Table was not found: #{table_name}.")
14
- end
15
-
16
- def list
17
- list = {}
18
- q_tables = @db.select("sqlite_master", {"type" => "table"}, {"orderby" => "name"})
19
- while d_tables = q_tables.fetch
20
- list[d_tables[:name]] = KnjDB_sqlite3::Tables::Table.new(
21
- :db => @db,
22
- :driver => @driver,
23
- :data => d_tables
24
- )
25
- end
26
-
27
- return list
28
- end
29
-
30
- def create(name, data)
31
- sql = "CREATE TABLE `#{name}` ("
32
-
33
- first = true
34
- data["columns"].each do |col_data|
35
- sql += ", " if !first
36
- first = false if first
37
- sql += @db.cols.data_sql(col_data)
38
- end
39
-
40
- sql += ")"
41
-
42
- @db.query(sql)
43
- @list = nil
44
-
45
- if data["indexes"]
46
- table_obj = self[name]
47
- table_obj.create_indexes(data["indexes"])
48
- end
49
- end
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 [](table_name)
11
+ list = self.list
12
+ return list[table_name.to_s] if list[table_name.to_s]
13
+ raise Knj::Errors::NotFound.new("Table was not found: #{table_name}.")
14
+ end
15
+
16
+ def list
17
+ list = {}
18
+ q_tables = @db.select("sqlite_master", {"type" => "table"}, {"orderby" => "name"})
19
+ while d_tables = q_tables.fetch
20
+ list[d_tables[:name]] = KnjDB_sqlite3::Tables::Table.new(
21
+ :db => @db,
22
+ :driver => @driver,
23
+ :data => d_tables
24
+ )
25
+ end
26
+
27
+ return list
28
+ end
29
+
30
+ def create(name, data)
31
+ sql = "CREATE TABLE `#{name}` ("
32
+
33
+ first = true
34
+ data["columns"].each do |col_data|
35
+ sql << ", " if !first
36
+ first = false if first
37
+ sql << @db.cols.data_sql(col_data)
38
+ end
39
+
40
+ sql << ")"
41
+
42
+ @db.query(sql)
43
+ @list = nil
44
+
45
+ if data["indexes"]
46
+ table_obj = self[name]
47
+ table_obj.create_indexes(data["indexes"])
48
+ end
49
+ end
50
50
  end
51
51
 
52
52
  class KnjDB_sqlite3::Tables::Table
53
- def initialize(args)
54
- @db = args[:db]
55
- @driver = args[:driver]
56
- @data = args[:data]
57
- end
58
-
59
- def name
60
- return @data[:name]
61
- end
62
-
63
- def drop
64
- sql = "DROP TABLE `#{self.name}`"
65
- @db.query(sql)
66
- end
67
-
68
- def optimize
69
- raise "stub!"
70
- end
71
-
72
- def column(name)
73
- list = self.columns
74
- return list[name] if list[name]
75
- raise Knj::Errors::NotFound.new("Column not found: #{name}.")
76
- end
77
-
78
- def columns
79
- if !@list
80
- @db.cols
81
- @list = {}
82
-
83
- q_cols = @db.query("PRAGMA table_info(`#{@driver.esc_table(self.name)}`)")
84
- while d_cols = q_cols.fetch
85
- @list[d_cols[:name]] = KnjDB_sqlite3::Columns::Column.new(
86
- :table => self,
87
- :db => @db,
88
- :driver => @driver,
89
- :data => d_cols
90
- )
91
- end
92
- end
93
-
94
- return @list
95
- end
96
-
97
- def create_columns(col_arr)
98
- col_arr.each do |col_data|
99
- #if col_data.key?("after")
100
- # self.create_column_programmatic(col_data)
101
- #else
102
- @db.query("ALTER TABLE `#{self.name}` ADD COLUMN #{@db.cols.data_sql(col_data)};")
103
- #end
104
- end
105
- end
106
-
107
- def create_column_programmatic(col_data)
108
- temp_name = "temptable_#{Knj::Php.md5(Knj::Datet.new.time.to_f)}"
109
- cloned_tabled = self.clone(temp_name)
110
- cols_cur = self.columns
111
- @db.query("DROP TABLE `#{self.name}`")
112
-
113
- sql = "CREATE TABLE `#{self.name}` ("
114
- first = true
115
- cols_cur.each do |name, col|
116
- sql += ", " if !first
117
- first = false if first
118
- sql += @db.cols.data_sql(col.data)
119
-
120
- if col_data["after"] and col_data["after"] == name
121
- sql += ", #{@db.cols.data_sql(col_data)}"
122
- end
123
- end
124
- sql += ");"
125
- @db.query(sql)
126
-
127
- sql = "INSERT INTO `#{self.name}` SELECT "
128
- first = true
129
- cols_cur.each do |name, col|
130
- sql += ", " if !first
131
- first = false if first
132
-
133
- sql += "`#{name}`"
134
-
135
- if col_data["after"] and col_data["after"] == name
136
- sql += ", ''"
137
- end
138
- end
139
- sql += " FROM `#{temp_name}`"
140
- @db.query(sql)
141
- @db.query("DROP TABLE `#{temp_name}`")
142
- end
143
-
144
- def clone(newname)
145
- raise "Invalid name." if newname.to_s.strip.length <= 0
146
- cols_cur = self.columns
147
-
148
- sql = "CREATE TABLE `#{newname}` ("
149
- first = true
150
- cols_cur.each do |name, col|
151
- sql += ", " if !first
152
- first = false if first
153
- sql += @db.cols.data_sql(col.data)
154
- end
155
-
156
- sql += ");"
157
- @db.query(sql)
158
-
159
- sql = "INSERT INTO `#{newname}` SELECT * FROM `#{self.name}`"
160
- @db.query(sql)
161
- return @db.tables[newname]
162
- end
163
-
164
- def copy(args = {})
165
- temp_name = "temptable_#{Knj::Php.md5(Knj::Datet.new.time.to_f)}"
166
- cloned_tabled = self.clone(temp_name)
167
- cols_cur = self.columns
168
- @db.query("DROP TABLE `#{self.name}`")
169
-
170
- sql = "CREATE TABLE `#{self.name}` ("
171
- first = true
172
- cols_cur.each do |name, col|
173
- next if args["drops"] and args["drops"].index(name) != nil
174
-
175
- sql += ", " if !first
176
- first = false if first
177
-
178
- if args.key?("alter_columns") and args["alter_columns"][name.to_s]
179
- sql += @db.cols.data_sql(args["alter_columns"][name.to_s])
180
- else
181
- sql += @db.cols.data_sql(col.data)
182
- end
183
-
184
- if args["new"]
185
- args["new"].each do |col_data|
186
- if col_data["after"] and col_data["after"] == name
187
- sql += ", #{@db.cols.data_sql(col_data)}"
188
- end
189
- end
190
- end
191
- end
192
- sql += ");"
193
- @db.query(sql)
194
-
195
- sql = "INSERT INTO `#{self.name}` SELECT "
196
- first = true
197
- cols_cur.each do |name, col|
198
- next if args["drops"] and args["drops"].index(name) != nil
199
-
200
- sql += ", " if !first
201
- first = false if first
202
-
203
- sql += "`#{name}`"
204
-
205
- if args["news"]
206
- args["news"].each do |col_data|
207
- if col_data["after"] and col_data["after"] == name
208
- sql += ", ''"
209
- end
210
- end
211
- end
212
- end
213
-
214
- sql += " FROM `#{temp_name}`"
215
- @db.query(sql)
216
- @db.query("DROP TABLE `#{temp_name}`")
217
- end
218
-
219
- def index(name)
220
- list = self.indexes
221
- return list[name] if list[name]
222
- raise Knj::Errors::NotFound.new("Index not found: #{name}.")
223
- end
224
-
225
- def indexes
226
- if !@indexes_list
227
- @db.indexes
228
- @indexes_list = {}
229
-
230
- q_indexes = @db.query("PRAGMA index_list(`#{@driver.esc_table(self.name)}`)")
231
- while d_indexes = q_indexes.fetch
53
+ def initialize(args)
54
+ @db = args[:db]
55
+ @driver = args[:driver]
56
+ @data = args[:data]
57
+ end
58
+
59
+ def name
60
+ return @data[:name]
61
+ end
62
+
63
+ def drop
64
+ sql = "DROP TABLE `#{self.name}`"
65
+ @db.query(sql)
66
+ end
67
+
68
+ def optimize
69
+ raise "stub!"
70
+ end
71
+
72
+ def column(name)
73
+ list = self.columns
74
+ return list[name] if list[name]
75
+ raise Knj::Errors::NotFound.new("Column not found: #{name}.")
76
+ end
77
+
78
+ def columns
79
+ if !@list
80
+ @db.cols
81
+ @list = {}
82
+
83
+ q_cols = @db.query("PRAGMA table_info(`#{@driver.esc_table(self.name)}`)")
84
+ while d_cols = q_cols.fetch
85
+ @list[d_cols[:name]] = KnjDB_sqlite3::Columns::Column.new(
86
+ :table => self,
87
+ :db => @db,
88
+ :driver => @driver,
89
+ :data => d_cols
90
+ )
91
+ end
92
+ end
93
+
94
+ return @list
95
+ end
96
+
97
+ def create_columns(col_arr)
98
+ col_arr.each do |col_data|
99
+ #if col_data.key?("after")
100
+ # self.create_column_programmatic(col_data)
101
+ #else
102
+ @db.query("ALTER TABLE `#{self.name}` ADD COLUMN #{@db.cols.data_sql(col_data)};")
103
+ #end
104
+ end
105
+ end
106
+
107
+ def create_column_programmatic(col_data)
108
+ temp_name = "temptable_#{Knj::Php.md5(Knj::Datet.new.time.to_f)}"
109
+ cloned_tabled = self.clone(temp_name)
110
+ cols_cur = self.columns
111
+ @db.query("DROP TABLE `#{self.name}`")
112
+
113
+ sql = "CREATE TABLE `#{self.name}` ("
114
+ first = true
115
+ cols_cur.each do |name, col|
116
+ sql << ", " if !first
117
+ first = false if first
118
+ sql << @db.cols.data_sql(col.data)
119
+
120
+ if col_data["after"] and col_data["after"] == name
121
+ sql << ", #{@db.cols.data_sql(col_data)}"
122
+ end
123
+ end
124
+ sql << ");"
125
+ @db.query(sql)
126
+
127
+ sql = "INSERT INTO `#{self.name}` SELECT "
128
+ first = true
129
+ cols_cur.each do |name, col|
130
+ sql << ", " if !first
131
+ first = false if first
132
+
133
+ sql << "`#{name}`"
134
+
135
+ if col_data["after"] and col_data["after"] == name
136
+ sql << ", ''"
137
+ end
138
+ end
139
+ sql << " FROM `#{temp_name}`"
140
+ @db.query(sql)
141
+ @db.query("DROP TABLE `#{temp_name}`")
142
+ end
143
+
144
+ def clone(newname)
145
+ raise "Invalid name." if newname.to_s.strip.length <= 0
146
+ cols_cur = self.columns
147
+
148
+ sql = "CREATE TABLE `#{newname}` ("
149
+ first = true
150
+ cols_cur.each do |name, col|
151
+ sql << ", " if !first
152
+ first = false if first
153
+ sql << @db.cols.data_sql(col.data)
154
+ end
155
+
156
+ sql << ");"
157
+ @db.query(sql)
158
+
159
+ sql = "INSERT INTO `#{newname}` SELECT * FROM `#{self.name}`"
160
+ @db.query(sql)
161
+ return @db.tables[newname]
162
+ end
163
+
164
+ def copy(args = {})
165
+ temp_name = "temptable_#{Knj::Php.md5(Knj::Datet.new.time.to_f)}"
166
+ cloned_tabled = self.clone(temp_name)
167
+ cols_cur = self.columns
168
+ @db.query("DROP TABLE `#{self.name}`")
169
+
170
+ sql = "CREATE TABLE `#{self.name}` ("
171
+ first = true
172
+ cols_cur.each do |name, col|
173
+ next if args["drops"] and args["drops"].index(name) != nil
174
+
175
+ sql << ", " if !first
176
+ first = false if first
177
+
178
+ if args.key?("alter_columns") and args["alter_columns"][name.to_s]
179
+ sql << @db.cols.data_sql(args["alter_columns"][name.to_s])
180
+ else
181
+ sql << @db.cols.data_sql(col.data)
182
+ end
183
+
184
+ if args["new"]
185
+ args["new"].each do |col_data|
186
+ if col_data["after"] and col_data["after"] == name
187
+ sql << ", #{@db.cols.data_sql(col_data)}"
188
+ end
189
+ end
190
+ end
191
+ end
192
+ sql << ");"
193
+ @db.query(sql)
194
+
195
+ sql = "INSERT INTO `#{self.name}` SELECT "
196
+ first = true
197
+ cols_cur.each do |name, col|
198
+ next if args["drops"] and args["drops"].index(name) != nil
199
+
200
+ sql << ", " if !first
201
+ first = false if first
202
+
203
+ sql << "`#{name}`"
204
+
205
+ if args["news"]
206
+ args["news"].each do |col_data|
207
+ if col_data["after"] and col_data["after"] == name
208
+ sql << ", ''"
209
+ end
210
+ end
211
+ end
212
+ end
213
+
214
+ sql << " FROM `#{temp_name}`"
215
+ @db.query(sql)
216
+ @db.query("DROP TABLE `#{temp_name}`")
217
+ end
218
+
219
+ def index(name)
220
+ list = self.indexes
221
+ return list[name] if list[name]
222
+ raise Knj::Errors::NotFound.new("Index not found: #{name}.")
223
+ end
224
+
225
+ def indexes
226
+ if !@indexes_list
227
+ @db.indexes
228
+ @indexes_list = {}
229
+
230
+ q_indexes = @db.query("PRAGMA index_list(`#{@driver.esc_table(self.name)}`)")
231
+ while d_indexes = q_indexes.fetch
232
232
  if @db.opts[:index_append_table_name]
233
233
  match_name = d_indexes[:name].match(/__(.+)$/)
234
234
 
@@ -241,60 +241,60 @@ class KnjDB_sqlite3::Tables::Table
241
241
  name = d_indexes[:name]
242
242
  end
243
243
 
244
- @indexes_list[name] = KnjDB_sqlite3::Indexes::Index.new(
245
- :table => self,
246
- :db => @db,
247
- :driver => @driver,
248
- :data => d_indexes
249
- )
250
-
251
- @indexes_list[name].columns << name
252
- end
253
- end
254
-
255
- return @indexes_list
256
- end
257
-
258
- def create_indexes(index_arr)
259
- index_arr.each do |index_data|
260
- raise "No name was given." if !index_data.key?("name") or index_data["name"].strip.length <= 0
261
- raise "No columns was given on index #{index_data["name"]}." if index_data["columns"].empty?
262
-
263
- name = index_data["name"]
264
- name = "#{self.name}__#{name}" if @db.opts[:index_append_table_name]
265
-
266
- sql = "CREATE INDEX #{@db.escape_col}#{@db.esc_col(name)}#{@db.escape_col} ON #{@db.escape_table}#{@db.esc_table(self.name)}#{@db.escape_table} ("
267
-
268
- first = true
269
- index_data["columns"].each do |col_name|
270
- sql += ", " if !first
271
- first = false if first
272
-
273
- sql += "#{@db.escape_col}#{@db.esc_col(col_name)}#{@db.escape_col}"
274
- end
275
-
276
- sql += ")"
277
-
278
- @db.query(sql)
279
- @indexes_list = nil
280
- end
281
- end
282
-
283
- def data
284
- ret = {
285
- "name" => name,
286
- "columns" => [],
287
- "indexes" => []
288
- }
289
-
290
- columns.each do |name, column|
291
- ret["columns"] << column.data
292
- end
293
-
294
- indexes.each do |name, index|
295
- ret["indexes"] << index.data if name != "PRIMARY"
296
- end
297
-
298
- return ret
299
- end
244
+ @indexes_list[name] = KnjDB_sqlite3::Indexes::Index.new(
245
+ :table => self,
246
+ :db => @db,
247
+ :driver => @driver,
248
+ :data => d_indexes
249
+ )
250
+
251
+ @indexes_list[name].columns << name
252
+ end
253
+ end
254
+
255
+ return @indexes_list
256
+ end
257
+
258
+ def create_indexes(index_arr)
259
+ index_arr.each do |index_data|
260
+ raise "No name was given." if !index_data.key?("name") or index_data["name"].strip.length <= 0
261
+ raise "No columns was given on index #{index_data["name"]}." if index_data["columns"].empty?
262
+
263
+ name = index_data["name"]
264
+ name = "#{self.name}__#{name}" if @db.opts[:index_append_table_name]
265
+
266
+ sql = "CREATE INDEX #{@db.escape_col}#{@db.esc_col(name)}#{@db.escape_col} ON #{@db.escape_table}#{@db.esc_table(self.name)}#{@db.escape_table} ("
267
+
268
+ first = true
269
+ index_data["columns"].each do |col_name|
270
+ sql << ", " if !first
271
+ first = false if first
272
+
273
+ sql << "#{@db.escape_col}#{@db.esc_col(col_name)}#{@db.escape_col}"
274
+ end
275
+
276
+ sql << ")"
277
+
278
+ @db.query(sql)
279
+ @indexes_list = nil
280
+ end
281
+ end
282
+
283
+ def data
284
+ ret = {
285
+ "name" => name,
286
+ "columns" => [],
287
+ "indexes" => []
288
+ }
289
+
290
+ columns.each do |name, column|
291
+ ret["columns"] << column.data
292
+ end
293
+
294
+ indexes.each do |name, index|
295
+ ret["indexes"] << index.data if name != "PRIMARY"
296
+ end
297
+
298
+ return ret
299
+ end
300
300
  end