ghazel-ar-extensions 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +145 -0
- data/README +169 -0
- data/Rakefile +61 -0
- data/config/database.yml +7 -0
- data/config/database.yml.template +7 -0
- data/config/mysql.schema +72 -0
- data/config/postgresql.schema +39 -0
- data/db/migrate/generic_schema.rb +97 -0
- data/db/migrate/mysql_schema.rb +32 -0
- data/db/migrate/oracle_schema.rb +5 -0
- data/db/migrate/version.rb +4 -0
- data/init.rb +31 -0
- data/lib/ar-extensions/adapters/abstract_adapter.rb +146 -0
- data/lib/ar-extensions/adapters/mysql.rb +10 -0
- data/lib/ar-extensions/adapters/oracle.rb +14 -0
- data/lib/ar-extensions/adapters/postgresql.rb +9 -0
- data/lib/ar-extensions/adapters/sqlite.rb +7 -0
- data/lib/ar-extensions/create_and_update/mysql.rb +7 -0
- data/lib/ar-extensions/create_and_update.rb +509 -0
- data/lib/ar-extensions/csv.rb +309 -0
- data/lib/ar-extensions/delete/mysql.rb +3 -0
- data/lib/ar-extensions/delete.rb +143 -0
- data/lib/ar-extensions/extensions.rb +513 -0
- data/lib/ar-extensions/finder_options/mysql.rb +6 -0
- data/lib/ar-extensions/finder_options.rb +275 -0
- data/lib/ar-extensions/finders.rb +94 -0
- data/lib/ar-extensions/foreign_keys.rb +70 -0
- data/lib/ar-extensions/fulltext/mysql.rb +44 -0
- data/lib/ar-extensions/fulltext.rb +62 -0
- data/lib/ar-extensions/import/mysql.rb +50 -0
- data/lib/ar-extensions/import/postgresql.rb +0 -0
- data/lib/ar-extensions/import/sqlite.rb +22 -0
- data/lib/ar-extensions/import.rb +348 -0
- data/lib/ar-extensions/insert_select/mysql.rb +7 -0
- data/lib/ar-extensions/insert_select.rb +178 -0
- data/lib/ar-extensions/synchronize.rb +30 -0
- data/lib/ar-extensions/temporary_table/mysql.rb +3 -0
- data/lib/ar-extensions/temporary_table.rb +131 -0
- data/lib/ar-extensions/union/mysql.rb +6 -0
- data/lib/ar-extensions/union.rb +204 -0
- data/lib/ar-extensions/util/sql_generation.rb +27 -0
- data/lib/ar-extensions/util/support_methods.rb +32 -0
- data/lib/ar-extensions/version.rb +9 -0
- data/lib/ar-extensions.rb +5 -0
- metadata +110 -0
data/ChangeLog
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
2009-07-22 zdennis <zach.dennis@gmail.com>
|
2
|
+
|
3
|
+
* Forgot to push past commit of fixing #sanitize_sql method signatures to supported passing in a table_name. This satisfies the change to the ActiveRecord API in Rails commit 489abfd3b23f3c4b3de86aeb3bde3970771c001b on April 20th.
|
4
|
+
|
5
|
+
2009-04-17 blythedunham <blythedunham@gmail.com>
|
6
|
+
|
7
|
+
* Added MySQL support for save, create, replace options - :ignore, :on_duplicate_key_update, :keywords, :reload, :keywords, :pre_sql, :post_sql
|
8
|
+
* Added MySQL support for find options: :keywords, :pre_sql, :post_sql, :index_hint
|
9
|
+
* Added MySQL support for find_union and count_union
|
10
|
+
* Added MySQL support for insert_select
|
11
|
+
* Added MySQL support for delete_duplicates and delete_all :batch_size => X
|
12
|
+
* Updated :on_duplicate_update_key to accept a string in addition to array
|
13
|
+
* Fixed Find Extension Range bug to exclude end when ... used instead of ..
|
14
|
+
|
15
|
+
2009-03-16 zdennis <zach.dennis@gmail.com>
|
16
|
+
|
17
|
+
* fixed Rails 2.3.1 and 2.3.2 compatibility issue (Stephen Heuer)
|
18
|
+
|
19
|
+
2009-02-09 zdennis <zach.dennis@gmail.com>
|
20
|
+
|
21
|
+
* fixed issue in http://zdennis.lighthouseapp.com/projects/14379/tickets/14-join-table-conditions-broken
|
22
|
+
* Updated usage of Inflector to point to ActiveSupport::Inflector
|
23
|
+
* Fixed bug where finder conditions which use arext-suffixed keys and normal field keys would fail when using a conditions hash. (Gabe da Silveira)
|
24
|
+
* added timestamps options to not automatically add timestamps even if record timestamps is disabled in ActiveRecord::Base (Thibaud Guillaume-Gentil)
|
25
|
+
* Updated to use alias_method_chain so that multiple aliased finders remain intact (Marcus Crafter)
|
26
|
+
|
27
|
+
2007-07-20 zdennis <zdennis@dhcp-22.atomicobject.localnet>
|
28
|
+
|
29
|
+
* Added patch from Michael Flester to fix bug with created_at/updated_at fields to use proper timezone.
|
30
|
+
|
31
|
+
2007-07-18 zdennis <zdennis@dhcp-22.atomicobject.localnet>
|
32
|
+
|
33
|
+
* Added patch for Oracle support from Michael Flester.
|
34
|
+
|
35
|
+
2007-05-05 zdennis <zdennis@elijah.local>
|
36
|
+
|
37
|
+
* Added ActiveRecord::Base::AbstractAdapter#synchronize method which allows a mass re-synchronization of ActiveRecord instances. This is similar to ActiveRecord::Base#reload except that it works on multiple instances at a time rather then one. This sends one query for all instances rather then 1 per instance reloaded.
|
38
|
+
|
39
|
+
* Fixed bug with URI encoded strings with a workaround in the Comparison extension. ActiveRecord needs to be fixed to not use the String#% method so strings that do contains percentage signs will not fail
|
40
|
+
|
41
|
+
* Applied patch from Grant Goodale to allow the Like extension to support arrays when using the '_contains' suffix
|
42
|
+
|
43
|
+
2007-03-14 zdennis <zdennis@elijah.xrite.com>
|
44
|
+
|
45
|
+
* Fixed a bug by renaming the alias for the ActiveRecord::Base#quote method in finders.rb. See rubyforge bug #8996
|
46
|
+
|
47
|
+
* Made a .gemspec for ar-extensions
|
48
|
+
|
49
|
+
2007-03-13 zdennis <zdennis@elijah>
|
50
|
+
|
51
|
+
* Added :datetime searching support for better finder support.
|
52
|
+
|
53
|
+
2007-02-11 zdennis <zdennis@admin.aries>
|
54
|
+
|
55
|
+
* Updated to_csv and import functionality to work with Sqlite, Sqlite3, PostgreSQL and MySQL
|
56
|
+
|
57
|
+
* Updated RDOC for import, to_csv, better finders, temporary tables and foreign key support
|
58
|
+
|
59
|
+
2007-01-29 zdennis <zdennis@mktec.com>
|
60
|
+
|
61
|
+
* Added initial support for temporary tables and permanent like tables.
|
62
|
+
|
63
|
+
2007-01-24 zdennis <zdennis@mktec.com>
|
64
|
+
|
65
|
+
* Added dependency for Mocha 0.4.0 or higher for testing
|
66
|
+
|
67
|
+
* Fixed bug for import functionality where it was never actually splitting up values correctly (thx to Mark Van Holstyn!!)
|
68
|
+
|
69
|
+
2007-01-09 zdennis <zdennis@aries>
|
70
|
+
|
71
|
+
* Added support for embedded to_csv includes
|
72
|
+
|
73
|
+
2007-01-07 zdennis <zdennis@aries>
|
74
|
+
|
75
|
+
* Added fix to init.rb to only load CSV functionality if FasterCSV
|
76
|
+
is available, otherwise print a message to STDERR and continue.
|
77
|
+
|
78
|
+
* Added fix to tests/boot.rb which solves fixture_path issues in
|
79
|
+
ActiveRecord 1.14.4 and earlier. The fix is included Rails trunk
|
80
|
+
and will be available in Rails 1.2.
|
81
|
+
|
82
|
+
2007-01-05 zdennis <zdennis@aries>
|
83
|
+
|
84
|
+
* Added ActiveRecord::Extensions::VERSION module which has the following constants: MAJOR, MINOR, REVISION
|
85
|
+
|
86
|
+
* Running rake tests are now smart enough to rebuild the database if they are required based on schema_info table.
|
87
|
+
|
88
|
+
* Added schema_info table for test database schemas.
|
89
|
+
|
90
|
+
2006-12-29 zdennis <zdennis@aries>
|
91
|
+
|
92
|
+
* Updated the Rakefile to run an external ruby process when running test files rather then in the same ruby process that runs the Rakefile
|
93
|
+
|
94
|
+
* Updated the directory structure of lib/ to solve namespace issues.
|
95
|
+
|
96
|
+
2006-12-22 Zach Dennis <zdennis@silver.dennis.network>
|
97
|
+
|
98
|
+
* Added rake tasks for sqlite and sqlite3 databases
|
99
|
+
|
100
|
+
* Added "does_not_match" as a suffix to better finders when working with Regular Expressions
|
101
|
+
|
102
|
+
* Added "not_between" suffix to better finders when working with Ranges
|
103
|
+
|
104
|
+
2006-12-17 zdennis <zdennis@aries>
|
105
|
+
|
106
|
+
* Added :only and :except options to to_csv method. Forcing
|
107
|
+
compatibility with http://blog.integralimpressions.com/articles/2006/09/01/tocsv-plugin
|
108
|
+
|
109
|
+
* Changed to_csv option :headers take a boolean rather then an
|
110
|
+
array of column names.
|
111
|
+
|
112
|
+
* Added rake task db:prepare_<adapter_name> to build test
|
113
|
+
database.
|
114
|
+
|
115
|
+
2006-12-16 Zach Dennis <zdennis@silver.dennis.network>
|
116
|
+
|
117
|
+
* Added more tests for better finder support
|
118
|
+
|
119
|
+
* Added to_csv support for Arrays returned by ActiveRecord::Base.find
|
120
|
+
|
121
|
+
* Refactored ActiveRecord::Extensions::Registry to use an Array instead of hash
|
122
|
+
|
123
|
+
2006-12-06 Zach Dennis <zdennis@silver.dennis.network>
|
124
|
+
|
125
|
+
* PostgreSQL has tested support for everything MySQL has except for Full Text Searching. This is not implemented.
|
126
|
+
|
127
|
+
* Refactored how import and full text searching implementation is handled, this is largely handled by duck typing certain method calls.
|
128
|
+
|
129
|
+
* Added generic import support for any adapter that doesn't support multi-value insert statements. This provides generic support which is guaranteed to be no slower then ActiveRecord#create.
|
130
|
+
|
131
|
+
2006-11-23 Zach Dennis <zdennis@silver.dennis.network>
|
132
|
+
|
133
|
+
* Added finder support for PostgreSQL including Regexp Searching. (No full text searching though)
|
134
|
+
|
135
|
+
* Fixed bug in finders.rb where NULL searches were not correctly being translated into IS NULL when doing { :column => nil }
|
136
|
+
|
137
|
+
2006-11-20 Zach Dennis <zach.dennis@gmail.com>
|
138
|
+
|
139
|
+
* Refactored core finder components out into ActiveRecord extensions
|
140
|
+
|
141
|
+
* Duck typing support for any object that is passed in to a conditions hash. ie: MyModel.find( :all, :conditions=>{ :name=>NameSearchObject.new } )
|
142
|
+
|
143
|
+
* Duck typing support for any object that is passed in as a condition. ie: MyModel.find( :all, :conditions=>SearchObject.new )
|
144
|
+
|
145
|
+
|
data/README
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
*ar-extensions is not compatible and is not being developed for Rails 3. Please use the activerecord-import gem which supports the same interface.*
|
2
|
+
|
3
|
+
LICENSE
|
4
|
+
----------
|
5
|
+
This is licensed under the ruby license.
|
6
|
+
|
7
|
+
Author: Zach Dennis
|
8
|
+
Web Site: http://www.continuousthinking.com/tags/arext
|
9
|
+
Email: zach.dennis@gmail.com
|
10
|
+
|
11
|
+
- For How-To information see http://www.continuousthinking.com/tags/arext
|
12
|
+
- For project information and feedback please consult http://rubyforge.org/projects/arext/
|
13
|
+
- For release information please see below
|
14
|
+
|
15
|
+
ActiveRecord::Extensions 0.9.0, 0.9.1
|
16
|
+
------------------------------
|
17
|
+
April 17, 2009
|
18
|
+
- Added MySQL support for save, create, replace options - :ignore, :on_duplicate_key_update, :keywords, :reload, :keywords, :pre_sql, :post_sql
|
19
|
+
- Added MySQL support for find options: :keywords, :pre_sql, :post_sql, :index_hint
|
20
|
+
- Added MySQL support for find_union and count_union
|
21
|
+
- Added MySQL support for insert_select
|
22
|
+
- Added MySQL support for delete_duplicates and delete_all :batch_size => X
|
23
|
+
- Updated :on_duplicate_update_key to accept a string in addition to array
|
24
|
+
- Fixed Find Extension Range bug to exclude end when ... used instead of ..
|
25
|
+
|
26
|
+
ActiveRecord::Extensions 0.8.2
|
27
|
+
------------------------------
|
28
|
+
March 16th, 2009
|
29
|
+
- Rails 2.3.1 and 2.3.2 compatibility added
|
30
|
+
- Rails 2.1.2 and 2.2.2 compatibility preserved
|
31
|
+
|
32
|
+
AciveRecord::Extensions 0.7.0
|
33
|
+
-----------------------------
|
34
|
+
July 20th, 2007
|
35
|
+
- Fixes timezone issue (thanks Michael Flester)
|
36
|
+
- Adds better finder and import support for Oracle (thanks Michael Flester)
|
37
|
+
- Committed patch to fix MySQL query padding, thanks to Gabe da Silveira
|
38
|
+
- Added functionality for MySQL to work with created_on, created_at, updated_on or updated_at fields
|
39
|
+
- Added more test coverage for import functionality
|
40
|
+
|
41
|
+
ActiveRecord::Extensions 0.6.0
|
42
|
+
------------------------------
|
43
|
+
May 5th, 2007
|
44
|
+
- Fixed bug with URI escaped strings and the Comparison better finder extension
|
45
|
+
- Added support for arrays with the Like better finder extension when using the '_contains' suffix
|
46
|
+
- Added 'synchronize' support for ActiveRecord::Base instances when using Import functionality
|
47
|
+
|
48
|
+
ActiveRecord::Extensions 0.5.2
|
49
|
+
------------------------------
|
50
|
+
March 14th, 2007
|
51
|
+
- Fixed Rubyforge bug #8996 by renaming alias in finders.rb to the ActiveRecord::Base#quote method
|
52
|
+
|
53
|
+
ActiveRecord::Extensions 0.5.1
|
54
|
+
------------------------------
|
55
|
+
March 14th, 2007
|
56
|
+
- Released as a rubygem
|
57
|
+
- Added a .gemspec file
|
58
|
+
|
59
|
+
ActiveRecord::Extensions 0.5.0
|
60
|
+
------------------------------
|
61
|
+
March 13th, 2007
|
62
|
+
- Added Time based query support which works on ActiveRecord columns which match a type supported by :datetime
|
63
|
+
|
64
|
+
ActiveRecord::Extensions 0.4.0
|
65
|
+
------------------------------
|
66
|
+
February 11th, 2007
|
67
|
+
- Added to_csv functionality
|
68
|
+
- Added temporary table support (MySQL)
|
69
|
+
- Added foreign key support (MySQL)
|
70
|
+
- Updated tests to keep schema information. Test database will automatically rebuild themselves if they are out of sync
|
71
|
+
- Added dependency for Mocha 0.4.0 or higher for tests
|
72
|
+
|
73
|
+
ActiveRecord::Extensions 0.3.0
|
74
|
+
------------------------------
|
75
|
+
December 29th, 2006
|
76
|
+
- Updates to the lib/ directory structure to avoid namespace issues.
|
77
|
+
- Updates to the Rakefile to run an external ruby process for tests rather then the same
|
78
|
+
ruby process that runs the rake tasks
|
79
|
+
|
80
|
+
ActiveRecord::Extensions 0.2.0
|
81
|
+
------------------------------
|
82
|
+
December 22nd, 2006
|
83
|
+
- Updates to_csv method for arrays returned by ActiveRecord::Base.find
|
84
|
+
- Adds does_not_match suffix for regular expression based conditions, ie: :field_does_not_match => /regex/
|
85
|
+
- Adds not_between suffix for ange based conditions, ie: :id_not_between => ( 0 .. 1 )
|
86
|
+
- Adds SQLite and SQLite3 support for better finders.
|
87
|
+
- Updates rake tasks for sqlite and sqlite3.
|
88
|
+
- Added rake tasks to use database migrations rather then raw SQL schema files.
|
89
|
+
|
90
|
+
ActiveRecord::Extensions 0.1.0
|
91
|
+
-------------------------------
|
92
|
+
December 16th, 2006
|
93
|
+
- Adds to_csv method to arrays returned by ActiveRecord::Base.find.
|
94
|
+
- Fixes bug in ActiveRecord::Extensions::Registry when processing key/value pairs where
|
95
|
+
the order of certain Extensions was not handled correctly due to Hash usage.
|
96
|
+
- Refactoring of ActiveRecord::Extensions::Registry
|
97
|
+
- Added more tests for better finder support
|
98
|
+
|
99
|
+
ActiveRecord::Extensions 0.0.6
|
100
|
+
------------------------------
|
101
|
+
December 5th, 2006
|
102
|
+
- Added generic support for import functionality for all adapters
|
103
|
+
- Includes rake testing tasks for postgresql
|
104
|
+
- Includes postgresql support for all extensions except for full text searching (which is only mysql)
|
105
|
+
- Refactored directory structure of tests, import functionality and fulltext functionality
|
106
|
+
|
107
|
+
|
108
|
+
ActiveRecord::Extensions 0.0.5
|
109
|
+
------------------------------
|
110
|
+
October 20th, 2006.
|
111
|
+
- Fixes two bugs which broke normal ActiveRecord behavior
|
112
|
+
- Fully complaint with Rails 1.1.0 thru 1.1.6 (and all ActiveRecord versions released with those)
|
113
|
+
- Inlcudes new Rakefile
|
114
|
+
- Includes rake task "test:mysql" which allows ActiveRecord::Extensions to be tested with mysql
|
115
|
+
- Includes rake test "test:activerecord:mysql" which allows ActiveRecord's tests to be tested with the
|
116
|
+
ActiveRecord::Extensions library
|
117
|
+
|
118
|
+
|
119
|
+
ActiveRecord::Extensions 0.0.4
|
120
|
+
-------------------------------
|
121
|
+
August 26th, 2006. Released at RubyConf*MI.
|
122
|
+
September 24th, 2006, Rubyforge release.
|
123
|
+
- Inlcudes "Better Finder" support for ActiveRecord
|
124
|
+
http://blogs.mktec.com/zdennis/pages/ARE_finders
|
125
|
+
|
126
|
+
|
127
|
+
ActiveRecord::Extensions 0.0.3
|
128
|
+
-------------------------------
|
129
|
+
Released.... ????
|
130
|
+
- the project has been named ActiveRecord::Extensions.
|
131
|
+
|
132
|
+
|
133
|
+
ActiveRecord::Optimizations 0.0.2
|
134
|
+
---------------------------------
|
135
|
+
July 20th, 11:27pm, Zach Dennis
|
136
|
+
|
137
|
+
This includes some of the optimizations for the ActiveRecord::Base. This release only supports the MysqlAdapter, although other adapters will be supported in upcoming releases.
|
138
|
+
|
139
|
+
HOW-TO USAGE
|
140
|
+
------------
|
141
|
+
Require the two files in the lib/ directory and then create records using:
|
142
|
+
Model.create array_of_hashes
|
143
|
+
|
144
|
+
Example:
|
145
|
+
class LogEntry < ActiveRecord::Base ; end
|
146
|
+
LogEntry.import [ { :log_entry_name=>"Name" }, {:log_entry_name=>"Name2"}, ... ], :optimize=>true
|
147
|
+
|
148
|
+
Using the optimized create method will return the number of inserts performed, rather then an array of LogEntry objects. This currently skips model validation.
|
149
|
+
|
150
|
+
|
151
|
+
CHANGELOG
|
152
|
+
----------
|
153
|
+
0.0.2
|
154
|
+
- add some documentation to the updated methods for ActiveRecord and MysqlAdapter
|
155
|
+
- renamed the create optimizatin to import. Multi-value inserts can be obtained using ActiveRecord::Base.import
|
156
|
+
0.0.1
|
157
|
+
- introduced updates to ActiveRecord::Base.create to support multi-value inserts
|
158
|
+
|
159
|
+
|
160
|
+
UPCOMING
|
161
|
+
----------
|
162
|
+
- model validation on imports
|
163
|
+
- postgresql support for imports
|
164
|
+
- ability to use regular expressions for db searches
|
165
|
+
- ability to use db functions
|
166
|
+
- temporary table support
|
167
|
+
- memory table support
|
168
|
+
- complex update with on duplicate key update support
|
169
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require "pathname"
|
2
|
+
require "rubygems"
|
3
|
+
require "rake"
|
4
|
+
require "rake/testtask"
|
5
|
+
|
6
|
+
DIR = Pathname.new(File.dirname(__FILE__))
|
7
|
+
ADAPTERS = %w(mysql postgresql sqlite sqlite3 oracle)
|
8
|
+
|
9
|
+
task :default => ["test:mysql"]
|
10
|
+
|
11
|
+
task :boot do
|
12
|
+
require DIR.join("lib", "ar-extensions").expand_path
|
13
|
+
require DIR.join("db", "migrate", "version").expand_path
|
14
|
+
end
|
15
|
+
|
16
|
+
ADAPTERS.each do |adapter|
|
17
|
+
namespace :db do
|
18
|
+
namespace :test do
|
19
|
+
desc "Builds test database for #{adapter}"
|
20
|
+
task "prepare_#{adapter}" do
|
21
|
+
ruby "#{DIR.join('tests', 'prepare.rb')} #{adapter}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
namespace :test do
|
27
|
+
desc "Test base extensions for #{adapter}"
|
28
|
+
task(adapter) do
|
29
|
+
ENV["ARE_DB"] = adapter
|
30
|
+
Rake::Task["db:test:prepare_#{adapter}"].invoke
|
31
|
+
ruby "#{DIR.join('tests', 'run.rb')} #{adapter}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
namespace :activerecord do
|
36
|
+
desc "Runs ActiveRecord unit tests for #{adapter} with ActiveRecord::Extensions"
|
37
|
+
task(adapter) do
|
38
|
+
activerecord_dir = ARGV[1]
|
39
|
+
if activerecord_dir.nil? || !File.directory?(activerecord_dir)
|
40
|
+
puts "ERROR: Pass in the path to ActiveRecord. Eg: /home/zdennis/rails_trunk/activerecord"
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
|
44
|
+
old_dir, old_env = Dir.pwd, ENV["RUBYOPT"]
|
45
|
+
Dir.chdir(activerecord_dir)
|
46
|
+
ENV["RUBYOPT"] = "-r#{File.join(old_dir,'init.rb')}"
|
47
|
+
|
48
|
+
load "Rakefile"
|
49
|
+
|
50
|
+
Rake::Task["test_#{adapter}"].invoke
|
51
|
+
Dir.chdir(old_dir)
|
52
|
+
ENV["RUBYOPT"] = old_env
|
53
|
+
end
|
54
|
+
|
55
|
+
desc "Runs ActiveRecord unit tests for #{adapter} with ActiveRecord::Extensions with ALL available #{adapter} functionality"
|
56
|
+
task "#{adapter}_all" do
|
57
|
+
ENV["LOAD_ADAPTER_EXTENSIONS"] = adapter
|
58
|
+
Rake::Task["test:activerecord:#{adapter}"].invoke
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/config/database.yml
ADDED
data/config/mysql.schema
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
|
2
|
+
create table test_myisam(
|
3
|
+
id int(11) unsigned not null auto_increment,
|
4
|
+
my_name varchar(20) not null,
|
5
|
+
description varchar(255) default '',
|
6
|
+
primary key (id)
|
7
|
+
)ENGINE=MyISAM;
|
8
|
+
|
9
|
+
|
10
|
+
create table test_innodb(
|
11
|
+
id int(11) unsigned not null auto_increment,
|
12
|
+
my_name varchar(20) not null,
|
13
|
+
description varchar(255) default '',
|
14
|
+
primary key (id)
|
15
|
+
)ENGINE=InnoDb;
|
16
|
+
|
17
|
+
|
18
|
+
create table test_memory(
|
19
|
+
id int(11) unsigned not null auto_increment,
|
20
|
+
my_name varchar(20) not null,
|
21
|
+
description varchar(255) default '',
|
22
|
+
primary key (id)
|
23
|
+
)ENGINE=memory;
|
24
|
+
|
25
|
+
|
26
|
+
create temporary table test_temp(
|
27
|
+
id int(11) unsigned not null auto_increment,
|
28
|
+
my_name varchar(20) not null,
|
29
|
+
description varchar(255) default '',
|
30
|
+
primary key (id)
|
31
|
+
);
|
32
|
+
|
33
|
+
CREATE TABLE `topics` (
|
34
|
+
`id` int(11) NOT NULL auto_increment,
|
35
|
+
`title` varchar(255) default NULL,
|
36
|
+
`author_name` varchar(255) default NULL,
|
37
|
+
`author_email_address` varchar(255) default NULL,
|
38
|
+
`written_on` datetime default NULL,
|
39
|
+
`bonus_time` time default NULL,
|
40
|
+
`last_read` date default NULL,
|
41
|
+
`content` text,
|
42
|
+
`approved` tinyint(1) default '1',
|
43
|
+
`replies_count` int(11) default '0',
|
44
|
+
`parent_id` int(11) default NULL,
|
45
|
+
`type` varchar(50) default NULL,
|
46
|
+
PRIMARY KEY (`id`)
|
47
|
+
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
48
|
+
|
49
|
+
CREATE TABLE `projects` (
|
50
|
+
`id` int(11) NOT NULL auto_increment,
|
51
|
+
`name` varchar(100) default NULL,
|
52
|
+
`type` varchar(255) NOT NULL,
|
53
|
+
PRIMARY KEY (`id`)
|
54
|
+
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
55
|
+
|
56
|
+
CREATE TABLE `developers` (
|
57
|
+
`id` int(11) NOT NULL auto_increment,
|
58
|
+
`name` varchar(100) default NULL,
|
59
|
+
`salary` int(11) default '70000',
|
60
|
+
`created_at` datetime default NULL,
|
61
|
+
`updated_at` datetime default NULL,
|
62
|
+
PRIMARY KEY (`id`)
|
63
|
+
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
64
|
+
|
65
|
+
CREATE TABLE `books` (
|
66
|
+
`id` int(11) NOT NULL auto_increment,
|
67
|
+
`title` varchar(255) NOT NULL,
|
68
|
+
`publisher` varchar(255) NOT NULL,
|
69
|
+
`author_name` varchar(255) NOT NULL,
|
70
|
+
PRIMARY KEY (`id`),
|
71
|
+
FULLTEXT( `title`, `publisher`, `author_name` )
|
72
|
+
) ENGINE=MyISAM;
|
@@ -0,0 +1,39 @@
|
|
1
|
+
CREATE TABLE topics (
|
2
|
+
id serial NOT NULL,
|
3
|
+
title character varying(255) default NULL,
|
4
|
+
author_name character varying(255) default NULL,
|
5
|
+
author_email_address character varying(255) default NULL,
|
6
|
+
written_on timestamp default NULL,
|
7
|
+
bonus_time time default NULL,
|
8
|
+
last_read date default NULL,
|
9
|
+
content text,
|
10
|
+
approved bool default TRUE,
|
11
|
+
replies_count integer default 0,
|
12
|
+
parent_id serial default NULL,
|
13
|
+
type character varying(50) default NULL,
|
14
|
+
PRIMARY KEY (id)
|
15
|
+
);
|
16
|
+
|
17
|
+
CREATE TABLE projects (
|
18
|
+
id serial NOT NULL,
|
19
|
+
name character varying(100) default NULL,
|
20
|
+
type character varying(255) NOT NULL,
|
21
|
+
PRIMARY KEY (id)
|
22
|
+
);
|
23
|
+
|
24
|
+
CREATE TABLE developers (
|
25
|
+
id serial NOT NULL,
|
26
|
+
name character varying(100) default NULL,
|
27
|
+
salary integer default 70000,
|
28
|
+
created_at timestamp default NULL,
|
29
|
+
updated_at timestamp default NULL,
|
30
|
+
PRIMARY KEY (id)
|
31
|
+
);
|
32
|
+
|
33
|
+
CREATE TABLE books (
|
34
|
+
id serial NOT NULL,
|
35
|
+
title character varying(255) NOT NULL,
|
36
|
+
publisher character varying(255) NOT NULL,
|
37
|
+
author_name character varying(255) NOT NULL,
|
38
|
+
PRIMARY KEY (id)
|
39
|
+
);
|
@@ -0,0 +1,97 @@
|
|
1
|
+
ActiveRecord::Schema.define do
|
2
|
+
|
3
|
+
create_table :schema_info, :force=>true do |t|
|
4
|
+
t.column :version, :integer, :unique=>true
|
5
|
+
end
|
6
|
+
SchemaInfo.create :version=>SchemaInfo::VERSION
|
7
|
+
|
8
|
+
create_table :group, :force => true do |t|
|
9
|
+
t.column :order, :string
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
create_table :topics, :force=>true do |t|
|
14
|
+
t.column :title, :string, :null=>false
|
15
|
+
t.column :author_name, :string
|
16
|
+
t.column :author_email_address, :string
|
17
|
+
t.column :written_on, :datetime
|
18
|
+
t.column :bonus_time, :time
|
19
|
+
t.column :last_read, :datetime
|
20
|
+
t.column :content, :text
|
21
|
+
t.column :approved, :boolean, :default=>'1'
|
22
|
+
t.column :replies_count, :integer
|
23
|
+
t.column :parent_id, :integer
|
24
|
+
t.column :type, :string
|
25
|
+
t.column :created_at, :datetime
|
26
|
+
t.column :updated_at, :datetime
|
27
|
+
end
|
28
|
+
|
29
|
+
create_table :projects, :force=>true do |t|
|
30
|
+
t.column :name, :string
|
31
|
+
t.column :type, :string
|
32
|
+
end
|
33
|
+
|
34
|
+
create_table :developers, :force=>true do |t|
|
35
|
+
t.column :name, :string
|
36
|
+
t.column :salary, :integer, :default=>'70000'
|
37
|
+
t.column :created_at, :datetime
|
38
|
+
t.column :team_id, :integer
|
39
|
+
t.column :updated_at, :datetime
|
40
|
+
end
|
41
|
+
|
42
|
+
create_table :addresses, :force=>true do |t|
|
43
|
+
t.column :address, :string
|
44
|
+
t.column :city, :string
|
45
|
+
t.column :state, :string
|
46
|
+
t.column :zip, :string
|
47
|
+
t.column :developer_id, :integer
|
48
|
+
end
|
49
|
+
|
50
|
+
create_table :teams, :force=>true do |t|
|
51
|
+
t.column :name, :string
|
52
|
+
end
|
53
|
+
|
54
|
+
create_table :books, :force=>true do |t|
|
55
|
+
t.column :title, :string, :null=>false
|
56
|
+
t.column :publisher, :string, :null=>false, :default => 'Default Publisher'
|
57
|
+
t.column :author_name, :string, :null=>false
|
58
|
+
t.column :created_at, :datetime
|
59
|
+
t.column :created_on, :datetime
|
60
|
+
t.column :updated_at, :datetime
|
61
|
+
t.column :updated_on, :datetime
|
62
|
+
t.column :publish_date, :date
|
63
|
+
t.column :topic_id, :integer
|
64
|
+
t.column :for_sale, :boolean, :default => true
|
65
|
+
end
|
66
|
+
|
67
|
+
create_table :languages, :force=>true do |t|
|
68
|
+
t.column :name, :string
|
69
|
+
t.column :developer_id, :integer
|
70
|
+
end
|
71
|
+
|
72
|
+
create_table :shopping_carts, :force=>true do |t|
|
73
|
+
t.column :name, :string, :null => true
|
74
|
+
t.column :created_at, :datetime
|
75
|
+
t.column :updated_at, :datetime
|
76
|
+
end
|
77
|
+
|
78
|
+
create_table :cart_items, :force => true do |t|
|
79
|
+
t.column :shopping_cart_id, :string, :null => false
|
80
|
+
t.column :book_id, :string, :null => false
|
81
|
+
t.column :copies, :integer, :default => 1
|
82
|
+
t.column :created_at, :datetime
|
83
|
+
t.column :updated_at, :datetime
|
84
|
+
end
|
85
|
+
|
86
|
+
add_index :cart_items, [:shopping_cart_id, :book_id], :unique => true, :name => 'uk_shopping_cart_books'
|
87
|
+
|
88
|
+
create_table :animals, :force => true do |t|
|
89
|
+
t.column :name, :string, :null => false
|
90
|
+
t.column :size, :string, :default => nil
|
91
|
+
t.column :created_at, :datetime
|
92
|
+
t.column :updated_at, :datetime
|
93
|
+
end
|
94
|
+
|
95
|
+
add_index :animals, [:name], :unique => true, :name => 'uk_animals'
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
ActiveRecord::Schema.define do
|
2
|
+
|
3
|
+
create_table :test_myisam, :options=>'ENGINE=MyISAM', :force=>true do |t|
|
4
|
+
t.column :my_name, :string, :null=>false
|
5
|
+
t.column :description, :string
|
6
|
+
end
|
7
|
+
|
8
|
+
create_table :test_innodb, :options=>'ENGINE=InnoDb', :force=>true do |t|
|
9
|
+
t.column :my_name, :string, :null=>false
|
10
|
+
t.column :description, :string
|
11
|
+
end
|
12
|
+
|
13
|
+
create_table :test_memory, :options=>'ENGINE=Memory', :force=>true do |t|
|
14
|
+
t.column :my_name, :string, :null=>false
|
15
|
+
t.column :description, :string
|
16
|
+
end
|
17
|
+
|
18
|
+
create_table :books, :options=>'ENGINE=MyISAM', :force=>true do |t|
|
19
|
+
t.column :title, :string, :null=>false
|
20
|
+
t.column :publisher, :string, :null=>false, :default => 'Default Publisher'
|
21
|
+
t.column :author_name, :string, :null=>false
|
22
|
+
t.column :created_at, :datetime
|
23
|
+
t.column :created_on, :datetime
|
24
|
+
t.column :updated_at, :datetime
|
25
|
+
t.column :updated_on, :datetime
|
26
|
+
t.column :publish_date, :date
|
27
|
+
t.column :topic_id, :integer
|
28
|
+
t.column :for_sale, :boolean, :default => true
|
29
|
+
end
|
30
|
+
execute "ALTER TABLE books ADD FULLTEXT( `title`, `publisher`, `author_name` )"
|
31
|
+
|
32
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
begin ; require 'active_record' ; rescue LoadError; require 'rubygems'; require 'active_record'; end
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
|
5
|
+
|
6
|
+
require 'ar-extensions/util/support_methods'
|
7
|
+
require 'ar-extensions/util/sql_generation'
|
8
|
+
require 'ar-extensions/version'
|
9
|
+
require 'ar-extensions/delete'
|
10
|
+
require 'ar-extensions/extensions'
|
11
|
+
require 'ar-extensions/create_and_update'
|
12
|
+
require 'ar-extensions/finder_options'
|
13
|
+
require 'ar-extensions/foreign_keys'
|
14
|
+
require 'ar-extensions/fulltext'
|
15
|
+
require 'ar-extensions/import'
|
16
|
+
require 'ar-extensions/insert_select'
|
17
|
+
require 'ar-extensions/finders'
|
18
|
+
require 'ar-extensions/synchronize'
|
19
|
+
require 'ar-extensions/temporary_table'
|
20
|
+
require 'ar-extensions/union'
|
21
|
+
require 'ar-extensions/adapters/abstract_adapter'
|
22
|
+
|
23
|
+
#load all available functionality for specified adapter
|
24
|
+
# Ex. ENV['LOAD_ADAPTER_EXTENSIONS'] = 'mysql'
|
25
|
+
if ENV['LOAD_ADAPTER_EXTENSIONS']
|
26
|
+
require "active_record/connection_adapters/#{ENV['LOAD_ADAPTER_EXTENSIONS']}_adapter.rb"
|
27
|
+
file_regexp = File.join(File.dirname(__FILE__), 'lib', 'ar-extensions','**',
|
28
|
+
"#{ENV['LOAD_ADAPTER_EXTENSIONS']}.rb")
|
29
|
+
|
30
|
+
Dir.glob(file_regexp){|file| require(file) }
|
31
|
+
end
|