skiima 0.1.000

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 (49) hide show
  1. data/.gitignore +20 -0
  2. data/.travis.yml +8 -0
  3. data/CHANGELOG +8 -0
  4. data/Gemfile +30 -0
  5. data/Guardfile +14 -0
  6. data/README.md +87 -0
  7. data/Rakefile +56 -0
  8. data/lib/skiima/db_adapters/base_mysql_adapter.rb +308 -0
  9. data/lib/skiima/db_adapters/mysql2_adapter.rb +114 -0
  10. data/lib/skiima/db_adapters/mysql_adapter.rb +287 -0
  11. data/lib/skiima/db_adapters/postgresql_adapter.rb +509 -0
  12. data/lib/skiima/db_adapters.rb +187 -0
  13. data/lib/skiima/dependency.rb +84 -0
  14. data/lib/skiima/locales/en.yml +20 -0
  15. data/lib/skiima/locales/fr.yml +2 -0
  16. data/lib/skiima/version.rb +4 -0
  17. data/lib/skiima.rb +270 -0
  18. data/lib/skiima_helpers.rb +49 -0
  19. data/skiima.gemspec +53 -0
  20. data/spec/config/database.yml +56 -0
  21. data/spec/db/skiima/depends.yml +61 -0
  22. data/spec/db/skiima/empty_depends.yml +0 -0
  23. data/spec/db/skiima/init_test_db/database.skiima_test.mysql.current.sql +2 -0
  24. data/spec/db/skiima/init_test_db/database.skiima_test.postgresql.current.sql +2 -0
  25. data/spec/db/skiima/test_column_names/table.test_column_names.mysql.current.sql +8 -0
  26. data/spec/db/skiima/test_column_names/table.test_column_names.postgresql.current.sql +18 -0
  27. data/spec/db/skiima/test_index/index.test_index.mysql.current.sql +2 -0
  28. data/spec/db/skiima/test_index/index.test_index.postgresql.current.sql +2 -0
  29. data/spec/db/skiima/test_proc/proc.test_proc.mysql.current.sql +8 -0
  30. data/spec/db/skiima/test_proc/proc.test_proc_drop.mysql.current.drop.sql +1 -0
  31. data/spec/db/skiima/test_proc/proc.test_proc_drop.mysql.current.sql +8 -0
  32. data/spec/db/skiima/test_rule/rule.test_rule.postgresql.current.sql +6 -0
  33. data/spec/db/skiima/test_schema/schema.test_schema.postgresql.current.sql +2 -0
  34. data/spec/db/skiima/test_table/table.test_table.mysql.current.sql +7 -0
  35. data/spec/db/skiima/test_table/table.test_table.postgresql.current.sql +4 -0
  36. data/spec/db/skiima/test_view/view.test_view.mysql.current.sql +5 -0
  37. data/spec/db/skiima/test_view/view.test_view.postgresql.current.sql +6 -0
  38. data/spec/helpers/mysql_spec_helper.rb +0 -0
  39. data/spec/helpers/postgresql_spec_helper.rb +11 -0
  40. data/spec/mysql2_spec.rb +57 -0
  41. data/spec/mysql_spec.rb +100 -0
  42. data/spec/postgresql_spec.rb +138 -0
  43. data/spec/skiima/db_adapters/mysql_adapter_spec.rb +38 -0
  44. data/spec/skiima/db_adapters/postgresql_adapter_spec.rb +20 -0
  45. data/spec/skiima/db_adapters_spec.rb +31 -0
  46. data/spec/skiima/dependency_spec.rb +94 -0
  47. data/spec/skiima_spec.rb +97 -0
  48. data/spec/spec_helper.rb +35 -0
  49. metadata +195 -0
@@ -0,0 +1,84 @@
1
+ module Skiima
2
+ module Dependency
3
+ class Script
4
+ attr_accessor :group, :adapter, :version
5
+ attr_accessor :type, :name, :attr
6
+ attr_accessor :filename, :content, :sql
7
+
8
+ def initialize(group, adapter, version, scriptname)
9
+ @group, @adapter, @version = group.to_s, adapter.to_s, version.to_s
10
+ set_attr(scriptname)
11
+ end
12
+
13
+ def filename
14
+ @filename = [@type,@name,@adapter.to_s,@version,'sql'].join('.')
15
+ end
16
+
17
+ def read_content(direction, root)
18
+ @content = case
19
+ when (direction == :up) then File.open(File.join(root, group, filename)).read
20
+ when (direction == :down && down_script?) then File.open(File.join(root, group, down_filename)).read
21
+ end
22
+ end
23
+
24
+ def interpolate_sql(char, vars = {})
25
+ @sql = Skiima.interpolate_sql(char, @content, vars)
26
+ end
27
+
28
+ private
29
+
30
+ def set_attr(scr_name)
31
+ scr_name = scr_name.split('.')
32
+ @type, @name = scr_name.shift, scr_name.shift
33
+ @attr = scr_name
34
+ end
35
+
36
+ def down_filename
37
+ filename.sub('.sql', '.drop.sql')
38
+ end
39
+
40
+ def down_script?
41
+ File.exist?(down_filename)
42
+ end
43
+ end
44
+
45
+ class Reader
46
+ attr_accessor :scripts
47
+ attr_accessor :depends, :adapter, :version
48
+
49
+ def initialize(depends, adapter, opts = {})
50
+ @depends, @adapter = depends, adapter.to_sym
51
+ @version = opts[:version] || :current
52
+ end
53
+
54
+ def adapter
55
+ case @adapter.to_s
56
+ when 'mysql', 'mysql2' then :mysql
57
+ else @adapter
58
+ end
59
+ end
60
+
61
+ def get_group(g)
62
+ raise Skiima::SqlGroupNotFound unless depends.has_key?(g)
63
+ depends[g]
64
+ end
65
+
66
+ def get_adapter(grp)
67
+ grp.has_key?(adapter) ? (grp[adapter] || {}) : {}
68
+ end
69
+
70
+ def get_scripts(group, version_grp)
71
+ scr = (version_grp.has_key?(version) ? (version_grp[version] || {}) : {})
72
+ sc = scr.map {|s| Skiima::Dependency::Script.new(group, adapter, version, s)}
73
+ end
74
+
75
+ def get_load_order(*groups)
76
+ @scripts = groups.inject([]) do |memo, g|
77
+ grp = Skiima.symbolize_keys(get_group(g))
78
+ grp = Skiima.symbolize_keys(get_adapter(grp))
79
+ memo = memo + get_scripts(g, grp)
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,20 @@
1
+ ---
2
+ en:
3
+ simple: easy
4
+ date:
5
+ relative: "%{relative_time} ago"
6
+
7
+ messages:
8
+ errors:
9
+ open_db_yaml: Could not open Skiima Database Config!
10
+ open_depends_yaml: Could not open Skiima Depends Config!
11
+ create:
12
+ start: Creating objects for @class
13
+ error: Encountered errors creating @class objects -
14
+ no_error: All @class objects created successfully!
15
+ delimiter: =================================
16
+ drop:
17
+ start: Dropping objects for @class
18
+ error: Encountered errors dropping @class objects -
19
+ no_error: All @class objects dropped successfully!
20
+ delimiter: =================================
@@ -0,0 +1,2 @@
1
+ fr:
2
+ translate: S'il vous plait, est-ce que vous ce traduire pour moi?
@@ -0,0 +1,4 @@
1
+ # encoding: utf-8
2
+ module Skiima
3
+ VERSION = "0.1.000"
4
+ end
data/lib/skiima.rb ADDED
@@ -0,0 +1,270 @@
1
+ # encoding: utf-8
2
+ require 'skiima/version'
3
+
4
+ require 'yaml'
5
+ require 'logger'
6
+ require 'fast_gettext'
7
+ require 'erubis'
8
+
9
+ require 'skiima_helpers'
10
+
11
+ # include FastGettext unless it already is
12
+ include FastGettext unless ::Object.included_modules.include?(FastGettext)
13
+
14
+ module Skiima
15
+ include FastGettext::Translation
16
+ extend SkiimaHelpers
17
+ extend ModuleHelpers
18
+
19
+ # require 'skiima/base'
20
+ autoload :Dependency, 'skiima/dependency'
21
+ autoload :DbAdapters, 'skiima/db_adapters'
22
+
23
+ set_defaults(:config, {
24
+ :root_path => 'specify/in/config/block',
25
+ :config_path => 'config',
26
+ :database_yaml => 'database.yml',
27
+ :scripts_path => 'db/skiima',
28
+ :depends_yaml => 'depends.yml',
29
+ :interpolator => '&',
30
+ :locale => 'en',
31
+ :logging_out => 'STDOUT',
32
+ :logging_level => '3' })
33
+ #should time zone be added to configs?
34
+
35
+ class << self
36
+ def setup
37
+ yield self
38
+ set_translation_repository
39
+ end
40
+
41
+ def new(env, opts = {})
42
+ Skiima::Loader.new(env, opts)
43
+ end
44
+
45
+ def up(*args)
46
+ opts = args.last.is_a?(Hash) ? args.pop : {}
47
+ ski = Skiima.new(env, opts).up(*args)
48
+ ensure
49
+ ski.connection.close
50
+ end
51
+
52
+ def down(*args)
53
+ opts = args.last.is_a?(Hash) ? args.pop : {}
54
+ Skiima.new(env, opts).down(*args)
55
+ ensure
56
+ ski.connection.close
57
+ end
58
+
59
+ def msg(*args)
60
+ locale = args.last.is_a?(Symbol) ? args.pop : default_locale
61
+ lookup = args.join('.')
62
+ Skiima._(lookup)
63
+ end
64
+
65
+ def log_message(logger, msg)
66
+ logger.debug msg
67
+ end
68
+
69
+ def default_locale
70
+ ::Skiima.locale
71
+ end
72
+
73
+ def set_translation_repository
74
+ FastGettext.add_text_domain('skiima', :path => File.join(File.dirname(__FILE__), 'skiima', 'locales'), :type => :yaml)
75
+ Skiima.text_domain = 'skiima'
76
+ Skiima.locale = locale.to_s
77
+ end
78
+
79
+ def self.exe_with_connection(db, &block)
80
+ resolver = Skiima::DbAdapters::Resolver.new db
81
+ connection = nil
82
+
83
+ begin
84
+ connection = self.send(resolver.adapter_method, db)
85
+ yield connection
86
+ rescue => ex
87
+ puts "Oh Noes!!"
88
+ ensure
89
+ connection.close
90
+ end
91
+ end
92
+
93
+ def interpolate_sql(char, sql, vars = {})
94
+ vars.inject(sql) do |memo, (k,v)|
95
+ memo = memo.gsub("#{char}#{k.to_s}", v)
96
+ end
97
+ end
98
+
99
+ def full_scripts_path(root = self.root_path, config = self.scripts_path)
100
+ File.join(root, config)
101
+ end
102
+
103
+ def full_database_path(root = self.root_path, config = self.config_path, db = self.database_yaml)
104
+ File.join(root, config, db)
105
+ end
106
+
107
+ def full_depends_path(root = self.root_path, config = self.scripts_path, depends = self.depends_yaml)
108
+ File.join(root, config, depends)
109
+ end
110
+
111
+ def read_db_yaml(file)
112
+ Skiima.symbolize_keys(self.read_yaml_or_throw(file, MissingFileException, "#{Skiima.msg('errors.open_db_yaml')} #{file}"))
113
+ end
114
+
115
+ def read_depends_yaml(file)
116
+ Skiima.symbolize_keys(self.read_yaml_or_throw(file, MissingFileException, "#{Skiima.msg('errors.open_depends_yaml')} #{file}"))
117
+ end
118
+
119
+ def read_sql_file(folder, file)
120
+ File.open(File.join(Skiima.full_scripts_path, folder, file)).read
121
+ end
122
+
123
+ def read_yaml_or_throw(file, errclass, errmsg)
124
+ yaml = begin
125
+ input = File.read(file)
126
+ eruby = Erubis::Eruby.new(input)
127
+ YAML::load(eruby.result(binding())) || {}
128
+ rescue => ex
129
+ raise errclass, errmsg
130
+ end
131
+
132
+ Skiima.symbolize_keys(yaml)
133
+ end
134
+
135
+ def method_missing(method, *args, &block)
136
+ setter = method.to_s.gsub(/=$/, '').to_sym if method.to_s =~ /=$/
137
+
138
+ val = case
139
+ when (@@config.keys.include?(method)) then @@config[method]
140
+ when (setter and @@config.keys.include?(setter)) then @@config[setter] = args.first
141
+ end
142
+
143
+ val || super
144
+ end
145
+ end
146
+
147
+ #BaseExceptions
148
+ class BaseException < ::StandardError; end
149
+ class MissingFileException < BaseException; end
150
+ class SqlGroupNotFound < BaseException; end
151
+ class SqlScriptNotFound < BaseException; end
152
+
153
+ #DbAdapterExceptions
154
+ class AdapterNotSpecified < BaseException; end
155
+ class LoadError < BaseException; end
156
+ class StatementInvalid < BaseException; end
157
+
158
+ class Loader
159
+ attr_accessor :config, :logger
160
+ attr_accessor :db, :connection
161
+ attr_accessor :scripts
162
+
163
+ def initialize(env, opts = {})
164
+ db_config = Skiima.symbolize_keys(opts[:db] || {})
165
+
166
+ self.config = Skiima.config.merge(opts)
167
+ create_logger
168
+ @db = Skiima.symbolize_keys(Skiima.read_db_yaml(full_database_path)[env].merge(db_config))
169
+ make_connection
170
+ @depends = Skiima.read_depends_yaml(full_depends_path)
171
+ end
172
+
173
+ def up(*args)
174
+ opts = args.last.is_a?(Hash) ? args.pop : {}
175
+ reader = Skiima::Dependency::Reader.new(@depends, @db[:adapter], opts)
176
+ scripts = reader.get_load_order(*args)
177
+ scripts.each do |s|
178
+ s.read_content(:up, full_scripts_path)
179
+ s.interpolate_sql(interpolator, interpolation_vars)
180
+ end
181
+ scripts.each {|s| connection.execute(s.sql)}
182
+ end
183
+
184
+ def down(*args)
185
+ opts = args.last.is_a?(Hash) ? args.pop : {}
186
+ reader = Skiima::Dependency::Reader.new(@depends, @db[:adapter], opts)
187
+ scripts = reader.get_load_order(*args).reverse
188
+ scripts.each do |s|
189
+ s.read_content(:down, full_scripts_path)
190
+ s.content ||= connection.drop(s.type, s.name, {:attr => s.attr}.merge(opts))
191
+ s.interpolate_sql(interpolator, interpolation_vars)
192
+ end
193
+ scripts.each {|s| connection.execute(s.sql)}
194
+ end
195
+
196
+ def make_connection
197
+ resolver = Skiima::DbAdapters::Resolver.new(@db)
198
+ @connection = Skiima.send(resolver.adapter_method, logger, @db)
199
+ end
200
+
201
+ def log_action(msg, &block)
202
+ begin
203
+ logger.debug "[#{Time.now}] Started: #{msg}"
204
+ results = yield
205
+ logger.debug "[#{Time.now}] Finished: #{msg}"
206
+ results
207
+ rescue
208
+ logger.error "[#{Time.now}] Error: #{msg}"
209
+ raise
210
+ end
211
+ end
212
+
213
+ def log_message(msg)
214
+ Skiima.log_message(logger, msg)
215
+ end
216
+
217
+ def interpolation_vars(vars = {})
218
+ { :database => db[:database] }.merge(vars)
219
+ end
220
+
221
+ def method_missing(method, *args, &block)
222
+ setter = method.to_s.gsub(/=$/, '').to_sym if method.to_s =~ /=$/
223
+
224
+ val = case
225
+ when (@config.keys.include?(method)) then @config[method]
226
+ when (setter and @config.keys.include?(setter)) then @config[setter] = args
227
+ end
228
+
229
+ val || super
230
+ end
231
+
232
+ private
233
+
234
+ def full_database_path
235
+ Skiima.full_database_path(self.root_path, self.config_path, self.database_yaml)
236
+ end
237
+
238
+ def full_depends_path
239
+ Skiima.full_depends_path(self.root_path, self.scripts_path, self.depends_yaml)
240
+ end
241
+
242
+ def full_scripts_path
243
+ Skiima.full_scripts_path(self.root_path, self.scripts_path)
244
+ end
245
+
246
+ def get_logger_out(str)
247
+ case str
248
+ when /STDOUT/i then ::STDOUT
249
+ when /STDERR/i then ::STDERR
250
+ else File.join(root_path, str)
251
+ end
252
+ end
253
+
254
+ def get_logger_level(str)
255
+ case str
256
+ when '4', /fatal/i then ::Logger::FATAL
257
+ when '3', /error/i then ::Logger::ERROR
258
+ when '2', /warn/i then ::Logger::WARN
259
+ when '1', /info/i then ::Logger::INFO
260
+ when '0', /debug/i then ::Logger::DEBUG
261
+ else ::Logger::ERROR
262
+ end
263
+ end
264
+
265
+ def create_logger
266
+ self.logger = ::Logger.new(get_logger_out(@config[:logging_out]))
267
+ self.logger.level = get_logger_level(@config[:logging_level])
268
+ end
269
+ end
270
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+ module SkiimaHelpers
3
+ def symbolize_keys(hash)
4
+ hash.inject({}) do |options, (key, value)|
5
+ options[(key.to_sym rescue key) || key] = value
6
+ options
7
+ end
8
+ end
9
+ end
10
+
11
+ module ModuleHelpers
12
+ def set_defaults(sym, val)
13
+ add_module_attr_reader(sym)
14
+ add_module_attr_writer(sym)
15
+ class_variable_set("@@#{sym.to_s}", val)
16
+ end
17
+
18
+ alias_method :set_default, :set_defaults
19
+
20
+ def add_module_attr_writer(sym)
21
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
22
+ def self.#{sym}=(obj)
23
+ @@#{sym} = obj
24
+ end
25
+ EOS
26
+
27
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
28
+ def #{sym}=(obj)
29
+ @@#{sym} = obj
30
+ end
31
+ EOS
32
+ end
33
+
34
+ def add_module_attr_reader(sym)
35
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
36
+ @@#{sym} = nil unless defined? @@#{sym}
37
+
38
+ def self.#{sym}
39
+ @@#{sym}
40
+ end
41
+ EOS
42
+
43
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
44
+ def #{sym}
45
+ @@#{sym}
46
+ end
47
+ EOS
48
+ end
49
+ end
data/skiima.gemspec ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "skiima/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "skiima"
7
+ s.version = Skiima::VERSION
8
+ s.authors = ["David Conner"]
9
+ s.email = ["dconner.pro@gmail.com"]
10
+ s.homepage = "http://github.com/dcunited001/skiima"
11
+ s.summary = %q{A SQL object manager for Rails projects}
12
+ s.description = %q{Skiima helps to manage SQL objects like views and functions}
13
+
14
+ s.rubyforge_project = "skiima"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency "fast_gettext", '~> 0.6.0'
23
+ s.add_dependency "erubis", '~> 2.7.0'
24
+
25
+ s.add_development_dependency "bundler", '>= 1.0.21'
26
+ s.add_development_dependency "minitest", '~> 2.9.1'
27
+ s.add_development_dependency "minitest-matchers", '~> 1.1.3'
28
+ s.add_development_dependency "mocha", '~> 0.10.0'
29
+
30
+ end
31
+
32
+ # Logging
33
+ # TODO: add logging messages
34
+ # TODO: convert to i18n messages
35
+
36
+ # SQL Objects
37
+ # add functions
38
+ # add procs
39
+ # add triggers
40
+
41
+ # Adapters
42
+ # SQL Server Adapter
43
+
44
+ # Skiima Options
45
+ # add a way to just return a list of scripts to be executed
46
+
47
+ # Refactor:
48
+ # reorganize modules
49
+
50
+ # Thor tasks ??
51
+ # TODO: thor task to load all sets
52
+ # TODO: thor task to load specific sets
53
+ # TODO: delegate rake tasks to thor (how?)
@@ -0,0 +1,56 @@
1
+ ---
2
+ production:
3
+ adapter: postgresql
4
+ encoding: utf8
5
+ database: skiima_production
6
+ username: skiima
7
+ password: test
8
+
9
+ development:
10
+ adapter: postgresql
11
+ encoding: utf8
12
+ database: skiima_development
13
+ username: skiima
14
+ password: test
15
+
16
+ test:
17
+ adapter: postgresql
18
+ encoding: utf8
19
+ database: skiima_test
20
+ username: skiima
21
+ password: test
22
+
23
+ postgresql_test:
24
+ adapter: postgresql
25
+ encoding: utf8
26
+ database: postgresql_test
27
+ username: skiima
28
+ password: test
29
+
30
+ mysql_test:
31
+ adapter: mysql
32
+ encoding: utf8
33
+ reconnect: false
34
+ database: mysql_test
35
+ pool: 5
36
+ username: skiima
37
+ password: test
38
+ socket: /tmp/mysql.sock
39
+
40
+ mysql2_test:
41
+ adapter: mysql2
42
+ encoding: utf8
43
+ reconnect: false
44
+ database: mysql_test
45
+ pool: 5
46
+ username: skiima
47
+ password: test
48
+ socket: /tmp/mysql.sock
49
+
50
+ sqlserver_test:
51
+ adapter: sqlserver
52
+ encoding: utf8
53
+ database: skiima_test
54
+ username: skiima
55
+ password: test
56
+
@@ -0,0 +1,61 @@
1
+ ---
2
+ init_test_db:
3
+ mysql:
4
+ current:
5
+ - database.skiima_test
6
+ postgresql:
7
+ current:
8
+ - database.skiima_test
9
+ test_table:
10
+ mysql:
11
+ current:
12
+ - table.test_table
13
+ postgresql:
14
+ current:
15
+ - table.test_table
16
+ test_column_names:
17
+ mysql:
18
+ current:
19
+ - table.test_column_names
20
+ postgresql:
21
+ current:
22
+ - table.test_column_names
23
+ test_index:
24
+ mysql:
25
+ current:
26
+ - index.test_index.test_table
27
+ postgresql:
28
+ current:
29
+ - index.test_index.test_table
30
+ test_schema:
31
+ mysql:
32
+ current:
33
+ - schema.test_schema
34
+ postgresql:
35
+ current:
36
+ - schema.test_schema
37
+ test_view:
38
+ mysql:
39
+ current:
40
+ - view.test_view
41
+ postgresql:
42
+ current:
43
+ - view.test_view
44
+ test_rule:
45
+ postgresql:
46
+ current:
47
+ - rule.test_rule.test_view
48
+ test_proc:
49
+ mysql:
50
+ current:
51
+ - proc.test_proc.test_proc
52
+ - proc.test_proc.test_proc_drop
53
+ blank_group:
54
+ mysql:
55
+ postgresql:
56
+ only_pg:
57
+ mysql:
58
+ postgresql:
59
+ current:
60
+ - table.only_pg
61
+ - view.pg_only
File without changes
@@ -0,0 +1,2 @@
1
+ DROP DATABASE IF EXISTS &database;
2
+ CREATE DATABASE &database;
@@ -0,0 +1,2 @@
1
+ DROP DATABASE IF EXISTS &database;
2
+ CREATE DATABASE &database;
@@ -0,0 +1,8 @@
1
+ DROP TABLE IF EXISTS test_column_names;
2
+ --==================
3
+ CREATE TABLE `test_column_names` (
4
+ `id` int(11) NOT NULL AUTO_INCREMENT,
5
+ `first_name` varchar(40) NOT NULL,
6
+ `last_name` varchar(40) NOT NULL,
7
+ PRIMARY KEY (`id`)
8
+ ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
@@ -0,0 +1,18 @@
1
+ DROP TABLE IF EXISTS test_column_names;
2
+ CREATE TABLE test_column_names (
3
+ id integer PRIMARY KEY,
4
+ email character varying(255),
5
+ encrypted_password character varying(128),
6
+ reset_password_token character varying(255),
7
+ reset_password_sent_at timestamp without time zone,
8
+ remember_created_at timestamp without time zone,
9
+ sign_in_count integer default 0,
10
+ current_sign_in_at timestamp without time zone,
11
+ last_sign_in_at timestamp without time zone,
12
+ current_sign_in_ip character varying(255),
13
+ last_sign_in_ip character varying(255),
14
+ created_at timestamp without time zone not null,
15
+ updated_at timestamp without time zone not null,
16
+ alias character varying(255),
17
+ first_name character varying(255),
18
+ last_name character varying(255));
@@ -0,0 +1,2 @@
1
+ # Drop index if exists is not available with Mysql
2
+ CREATE INDEX test_index ON test_table (id) USING BTREE;
@@ -0,0 +1,2 @@
1
+ DROP INDEX IF EXISTS test_index;
2
+ CREATE UNIQUE INDEX test_index ON test_table (id);
@@ -0,0 +1,8 @@
1
+ DROP PROCEDURE IF EXISTS `test_proc`;
2
+ --============
3
+ CREATE PROCEDURE `test_proc`(test INT)
4
+ BEGIN
5
+
6
+ SELECT test;
7
+
8
+ END;
@@ -0,0 +1 @@
1
+ DROP PROCEDURE IF EXISTS `test_proc_drop`;
@@ -0,0 +1,8 @@
1
+ DROP PROCEDURE IF EXISTS `test_proc_drop`;
2
+ --============
3
+ CREATE PROCEDURE `test_proc_drop`(test INT)
4
+ BEGIN
5
+
6
+ SELECT test;
7
+
8
+ END;
@@ -0,0 +1,6 @@
1
+ DROP RULE IF EXISTS test_rule on test_view;
2
+ CREATE RULE test_rule AS
3
+ ON DELETE TO test_view DO INSTEAD
4
+
5
+ DELETE FROM test_table tt
6
+ WHERE tt.id = OLD.test_id
@@ -0,0 +1,2 @@
1
+ DROP SCHEMA IF EXISTS test_schema;
2
+ CREATE SCHEMA test_schema;
@@ -0,0 +1,7 @@
1
+ DROP TABLE IF EXISTS test_table;
2
+ --==================
3
+ CREATE TABLE `test_table` (
4
+ `id` int(11) NOT NULL AUTO_INCREMENT,
5
+ `name` varchar(40) NOT NULL,
6
+ PRIMARY KEY (`id`)
7
+ ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;