thinking-sphinx 1.4.6 → 1.4.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +6 -1
- data/features/searching_by_model.feature +24 -30
- data/features/thinking_sphinx/db/.gitignore +1 -0
- data/features/thinking_sphinx/db/fixtures/post_keywords.txt +1 -0
- data/lib/cucumber/thinking_sphinx/internal_world.rb +26 -26
- data/lib/thinking_sphinx.rb +17 -26
- data/lib/thinking_sphinx/active_record.rb +69 -74
- data/lib/thinking_sphinx/active_record/attribute_updates.rb +11 -10
- data/lib/thinking_sphinx/active_record/has_many_association.rb +2 -1
- data/lib/thinking_sphinx/adapters/abstract_adapter.rb +11 -11
- data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +34 -20
- data/lib/thinking_sphinx/association.rb +12 -7
- data/lib/thinking_sphinx/attribute.rb +64 -61
- data/lib/thinking_sphinx/configuration.rb +32 -36
- data/lib/thinking_sphinx/context.rb +3 -2
- data/lib/thinking_sphinx/deploy/capistrano.rb +7 -9
- data/lib/thinking_sphinx/search.rb +201 -178
- data/lib/thinking_sphinx/source/sql.rb +1 -1
- data/lib/thinking_sphinx/tasks.rb +21 -19
- data/lib/thinking_sphinx/version.rb +3 -0
- data/spec/fixtures/data.sql +32 -0
- data/spec/fixtures/database.yml.default +3 -0
- data/spec/fixtures/models.rb +161 -0
- data/spec/fixtures/structure.sql +146 -0
- data/spec/spec_helper.rb +57 -0
- data/spec/sphinx_helper.rb +61 -0
- data/spec/thinking_sphinx/active_record/delta_spec.rb +24 -24
- data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +22 -0
- data/spec/thinking_sphinx/active_record/scopes_spec.rb +25 -25
- data/spec/thinking_sphinx/active_record_spec.rb +110 -109
- data/spec/thinking_sphinx/adapters/abstract_adapter_spec.rb +38 -38
- data/spec/thinking_sphinx/association_spec.rb +20 -2
- data/spec/thinking_sphinx/context_spec.rb +61 -64
- data/spec/thinking_sphinx/search_spec.rb +7 -0
- data/spec/thinking_sphinx_spec.rb +47 -46
- metadata +50 -98
- data/VERSION +0 -1
- data/tasks/distribution.rb +0 -34
- data/tasks/testing.rb +0 -80
@@ -16,36 +16,36 @@ namespace :thinking_sphinx do
|
|
16
16
|
Sinatra::Application.environment = ENV['RACK_ENV']
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
desc "Output the current Thinking Sphinx version"
|
21
21
|
task :version => :app_env do
|
22
|
-
puts "Thinking Sphinx v" + ThinkingSphinx
|
22
|
+
puts "Thinking Sphinx v" + ThinkingSphinx::Version
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
desc "Stop if running, then start a Sphinx searchd daemon using Thinking Sphinx's settings"
|
26
26
|
task :running_start => :app_env do
|
27
27
|
Rake::Task["thinking_sphinx:stop"].invoke if sphinx_running?
|
28
28
|
Rake::Task["thinking_sphinx:start"].invoke
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
desc "Start a Sphinx searchd daemon using Thinking Sphinx's settings"
|
32
32
|
task :start => :app_env do
|
33
33
|
config = ThinkingSphinx::Configuration.instance
|
34
|
-
|
34
|
+
|
35
35
|
FileUtils.mkdir_p config.searchd_file_path
|
36
36
|
raise RuntimeError, "searchd is already running." if sphinx_running?
|
37
|
-
|
37
|
+
|
38
38
|
Dir["#{config.searchd_file_path}/*.spl"].each { |file| File.delete(file) }
|
39
|
-
|
39
|
+
|
40
40
|
config.controller.start
|
41
|
-
|
41
|
+
|
42
42
|
if sphinx_running?
|
43
43
|
puts "Started successfully (pid #{sphinx_pid})."
|
44
44
|
else
|
45
45
|
puts "Failed to start searchd daemon. Check #{config.searchd_log_file}"
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
desc "Stop Sphinx using Thinking Sphinx's settings"
|
50
50
|
task :stop => :app_env do
|
51
51
|
unless sphinx_running?
|
@@ -54,26 +54,26 @@ namespace :thinking_sphinx do
|
|
54
54
|
config = ThinkingSphinx::Configuration.instance
|
55
55
|
pid = sphinx_pid
|
56
56
|
config.controller.stop
|
57
|
-
|
57
|
+
|
58
58
|
# Ensure searchd is stopped, but don't try too hard
|
59
|
-
Timeout.timeout(
|
59
|
+
Timeout.timeout(config.stop_timeout) do
|
60
60
|
sleep(1) until config.controller.stop
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
puts "Stopped search daemon (pid #{pid})."
|
64
64
|
end
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
desc "Restart Sphinx"
|
68
68
|
task :restart => [:app_env, :stop, :start]
|
69
|
-
|
69
|
+
|
70
70
|
desc "Generate the Sphinx configuration file using Thinking Sphinx's settings"
|
71
71
|
task :configure => :app_env do
|
72
72
|
config = ThinkingSphinx::Configuration.instance
|
73
73
|
puts "Generating Configuration to #{config.config_file}"
|
74
74
|
config.build
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
desc "Index data for Sphinx using Thinking Sphinx's settings"
|
78
78
|
task :index => :app_env do
|
79
79
|
config = ThinkingSphinx::Configuration.instance
|
@@ -81,18 +81,20 @@ namespace :thinking_sphinx do
|
|
81
81
|
puts "Generating Configuration to #{config.config_file}"
|
82
82
|
config.build
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
FileUtils.mkdir_p config.searchd_file_path
|
86
86
|
config.controller.index :verbose => true
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
desc "Reindex Sphinx without regenerating the configuration file"
|
90
90
|
task :reindex => :app_env do
|
91
91
|
config = ThinkingSphinx::Configuration.instance
|
92
92
|
FileUtils.mkdir_p config.searchd_file_path
|
93
|
-
|
93
|
+
output = config.controller.index
|
94
|
+
puts output
|
95
|
+
config.touch_reindex_file(output)
|
94
96
|
end
|
95
|
-
|
97
|
+
|
96
98
|
desc "Stop Sphinx (if it's running), rebuild the indexes, and start Sphinx"
|
97
99
|
task :rebuild => :app_env do
|
98
100
|
Rake::Task["thinking_sphinx:stop"].invoke if sphinx_running?
|
@@ -0,0 +1,32 @@
|
|
1
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Ellie','K','Ford','38 Mills Street','Eagle Farm Bc','QLD','4009','Ellie.K.Ford@mailinator.com','1970/1/23 00:00:00', 3, 'CricketTeam');
|
2
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Aaliyah','E','Allen','71 Murphy Street','Wyola West','WA','6407','Aaliyah.E.Allen@dodgit.com','1980/3/23 00:00:00', 3, 'CricketTeam');
|
3
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('male','Callum','C','Miah','89 Dalgarno Street','Bullawa Creek','NSW','2390','Callum.C.Miah@trashymail.com','1973/3/25 00:00:00', 3, 'CricketTeam');
|
4
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('male','Finley','L','Buckley','18 Queen Street','Manly Vale','NSW','2093','Finley.L.Buckley@spambob.com','1962/11/20 00:00:00', 3, 'CricketTeam');
|
5
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Poppy','A','Hilton','36 Nerrigundah Drive','Nyora','VIC','3987','Poppy.A.Hilton@dodgit.com','1972/10/30 00:00:00', 3, 'CricketTeam');
|
6
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Eloise','Z','Kennedy','18 Mt Berryman Road','Lilydale','QLD','4344','Eloise.Z.Kennedy@spambob.com','1973/9/28 00:00:00', 3, 'CricketTeam');
|
7
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Shannon','L','Manning','60 Ocean Pde','Greenvale','QLD','4816','Shannon.L.Manning@dodgit.com','1956/6/13 00:00:00', 3, 'FootballTeam');
|
8
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('male','Oscar','C','Lawson','43 Feather Street','Battery Hill','QLD','4551','Oscar.C.Lawson@spambob.com','1979/10/17 00:00:00', 3, 'CricketTeam');
|
9
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Sofia','K','Bray','26 Clifton Street','Pental Island','VIC','3586','Sofia.K.Bray@mailinator.com','1970/5/10 00:00:00', 3, 'CricketTeam');
|
10
|
+
insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('male','Andrew','N','Byrne','35 Cecil Street','Monash Park','NSW','2111','Andrew.N.Byrne@spambob.com','1983/2/16 00:00:00', 3, 'CricketTeam');
|
11
|
+
|
12
|
+
insert into `alphas` (name) values ('one');
|
13
|
+
insert into `alphas` (name) values ('two');
|
14
|
+
insert into `alphas` (name) values ('three');
|
15
|
+
insert into `alphas` (name) values ('four');
|
16
|
+
insert into `alphas` (name) values ('five');
|
17
|
+
insert into `alphas` (name) values ('six');
|
18
|
+
insert into `alphas` (name) values ('seven');
|
19
|
+
insert into `alphas` (name) values ('eight');
|
20
|
+
insert into `alphas` (name) values ('nine');
|
21
|
+
insert into `alphas` (name) values ('ten');
|
22
|
+
|
23
|
+
insert into `betas` (name) values ('one');
|
24
|
+
insert into `betas` (name) values ('two');
|
25
|
+
insert into `betas` (name) values ('three');
|
26
|
+
insert into `betas` (name) values ('four');
|
27
|
+
insert into `betas` (name) values ('five');
|
28
|
+
insert into `betas` (name) values ('six');
|
29
|
+
insert into `betas` (name) values ('seven');
|
30
|
+
insert into `betas` (name) values ('eight');
|
31
|
+
insert into `betas` (name) values ('nine');
|
32
|
+
insert into `betas` (name) values ('ten');
|
@@ -0,0 +1,161 @@
|
|
1
|
+
class Tag < ActiveRecord::Base
|
2
|
+
belongs_to :person
|
3
|
+
belongs_to :football_team
|
4
|
+
belongs_to :cricket_team
|
5
|
+
end
|
6
|
+
|
7
|
+
class FootballTeam < ActiveRecord::Base
|
8
|
+
has_many :tags
|
9
|
+
has_many :people, :through => :tags
|
10
|
+
end
|
11
|
+
|
12
|
+
class CricketTeam < ActiveRecord::Base
|
13
|
+
has_many :people, :foreign_key => :team_id
|
14
|
+
|
15
|
+
define_index do
|
16
|
+
indexes :name
|
17
|
+
has "SELECT cricket_team_id, id FROM tags", :source => :query, :as => :tags
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Contact < ActiveRecord::Base
|
22
|
+
belongs_to :person
|
23
|
+
end
|
24
|
+
|
25
|
+
class Friendship < ActiveRecord::Base
|
26
|
+
belongs_to :person
|
27
|
+
belongs_to :friend, :class_name => "Person", :foreign_key => :friend_id
|
28
|
+
|
29
|
+
define_index do
|
30
|
+
indexes "'something'", :as => :something
|
31
|
+
has person_id, friend_id
|
32
|
+
|
33
|
+
set_property :latitude_attr => :person_id
|
34
|
+
set_property :longitude_attr => :person_id
|
35
|
+
end
|
36
|
+
|
37
|
+
sphinx_scope(:reverse) {
|
38
|
+
{:order => "@weight ASC"}
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
class Link < ActiveRecord::Base
|
43
|
+
has_and_belongs_to_many :people
|
44
|
+
end
|
45
|
+
|
46
|
+
class Person < ActiveRecord::Base
|
47
|
+
belongs_to :team, :polymorphic => :true
|
48
|
+
belongs_to :source, :polymorphic => :true
|
49
|
+
has_many :contacts
|
50
|
+
|
51
|
+
has_many :friendships
|
52
|
+
has_many :friends, :through => :friendships
|
53
|
+
|
54
|
+
has_many :tags
|
55
|
+
has_many :football_teams, :through => :tags
|
56
|
+
|
57
|
+
has_and_belongs_to_many :links
|
58
|
+
|
59
|
+
define_index do
|
60
|
+
indexes [first_name, middle_initial, last_name], :as => :name
|
61
|
+
indexes team.name, :as => :team_name
|
62
|
+
indexes contacts.phone_number, :as => :phone_numbers
|
63
|
+
indexes city, :prefixes => true, :facet => true
|
64
|
+
indexes state, :infixes => true, :facet => true
|
65
|
+
|
66
|
+
has [first_name, middle_initial, last_name], :as => :name_sort
|
67
|
+
has team.name, :as => :team_name_sort
|
68
|
+
|
69
|
+
has [:id, :team_id], :as => :ids
|
70
|
+
has team(:id), :as => :team_id
|
71
|
+
has football_teams(:id), :as => :football_team_id
|
72
|
+
|
73
|
+
has contacts.phone_number, :as => :phone_number_sort
|
74
|
+
has contacts(:id), :as => :contact_ids
|
75
|
+
|
76
|
+
has birthday, :facet => true
|
77
|
+
|
78
|
+
has friendships.person_id, :as => :friendly_ids
|
79
|
+
|
80
|
+
has :id, :as => :latitude
|
81
|
+
has :id, :as => :longitude
|
82
|
+
|
83
|
+
set_property :delta => true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
class Parent < Person
|
88
|
+
end
|
89
|
+
|
90
|
+
module Admin
|
91
|
+
class Person < ::Person
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class Child < Person
|
96
|
+
belongs_to :parent
|
97
|
+
define_index do
|
98
|
+
indexes [parent.first_name, parent.middle_initial, parent.last_name], :as => :parent_name
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class Alpha < ActiveRecord::Base
|
103
|
+
has_many :betas
|
104
|
+
has_many :thetas
|
105
|
+
|
106
|
+
define_index do
|
107
|
+
indexes :name, :sortable => true
|
108
|
+
|
109
|
+
has :id, :as => :lat
|
110
|
+
has :id, :as => :lng
|
111
|
+
|
112
|
+
set_property :field_weights => {"name" => 10}
|
113
|
+
end
|
114
|
+
|
115
|
+
def big_name
|
116
|
+
name.upcase
|
117
|
+
end
|
118
|
+
|
119
|
+
def sphinx_attributes
|
120
|
+
:existing
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
class Beta < ActiveRecord::Base
|
125
|
+
has_many :gammas
|
126
|
+
|
127
|
+
define_index do
|
128
|
+
indexes :name, :sortable => true
|
129
|
+
|
130
|
+
has :id, :as => :lat
|
131
|
+
has :id, :as => :lon
|
132
|
+
|
133
|
+
set_property :delta => true
|
134
|
+
end
|
135
|
+
|
136
|
+
def excerpts
|
137
|
+
false
|
138
|
+
end
|
139
|
+
|
140
|
+
def matching_fields
|
141
|
+
:foo
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
class Gamma < ActiveRecord::Base
|
146
|
+
#
|
147
|
+
end
|
148
|
+
|
149
|
+
class Theta < ActiveRecord::Base
|
150
|
+
#
|
151
|
+
end
|
152
|
+
|
153
|
+
class Search < ActiveRecord::Base
|
154
|
+
#
|
155
|
+
end
|
156
|
+
|
157
|
+
class BigFoo < ActiveRecord::Base
|
158
|
+
define_index do
|
159
|
+
indexes name
|
160
|
+
end
|
161
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
DROP TABLE IF EXISTS `people`;
|
2
|
+
|
3
|
+
CREATE TABLE `people` (
|
4
|
+
`id` int(11) NOT NULL auto_increment,
|
5
|
+
`first_name` varchar(50) NULL,
|
6
|
+
`middle_initial` varchar(10) NULL,
|
7
|
+
`last_name` varchar(50) NULL,
|
8
|
+
`gender` varchar(10) NULL,
|
9
|
+
`street_address` varchar(200) NULL,
|
10
|
+
`city` varchar(100) NULL,
|
11
|
+
`state` varchar(100) NULL,
|
12
|
+
`postcode` varchar(10) NULL,
|
13
|
+
`email` varchar(100) NULL,
|
14
|
+
`birthday` datetime NULL,
|
15
|
+
`team_id` int(11) NULL,
|
16
|
+
`team_type` varchar(50) NULL,
|
17
|
+
`type` varchar(50) NULL,
|
18
|
+
`parent_id` varchar(50) NULL,
|
19
|
+
`source_id` int(11) NULL,
|
20
|
+
`source_type` varchar(50) NULL,
|
21
|
+
`delta` tinyint(1) NOT NULL DEFAULT 0,
|
22
|
+
PRIMARY KEY (`id`)
|
23
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
24
|
+
|
25
|
+
DROP TABLE IF EXISTS `friendships`;
|
26
|
+
|
27
|
+
CREATE TABLE `friendships` (
|
28
|
+
`id` int(11) NOT NULL auto_increment,
|
29
|
+
`person_id` int(11) NOT NULL,
|
30
|
+
`friend_id` int(11) NOT NULL,
|
31
|
+
`created_at` datetime NOT NULL,
|
32
|
+
`created_on` date NULL,
|
33
|
+
`updated_at` datetime NOT NULL,
|
34
|
+
PRIMARY KEY (`id`)
|
35
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
36
|
+
|
37
|
+
DROP TABLE IF EXISTS `football_teams`;
|
38
|
+
|
39
|
+
CREATE TABLE `football_teams` (
|
40
|
+
`id` int(11) NOT NULL auto_increment,
|
41
|
+
`name` varchar(50) NOT NULL,
|
42
|
+
`state` varchar(50) NOT NULL,
|
43
|
+
`league` varchar(50) NOT NULL,
|
44
|
+
PRIMARY KEY (`id`)
|
45
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
46
|
+
|
47
|
+
DROP TABLE IF EXISTS `cricket_teams`;
|
48
|
+
|
49
|
+
CREATE TABLE `cricket_teams` (
|
50
|
+
`id` int(11) NOT NULL auto_increment,
|
51
|
+
`name` varchar(50) NOT NULL,
|
52
|
+
`state` varchar(50) NOT NULL,
|
53
|
+
PRIMARY KEY (`id`)
|
54
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
55
|
+
|
56
|
+
DROP TABLE IF EXISTS `contacts`;
|
57
|
+
|
58
|
+
CREATE TABLE `contacts` (
|
59
|
+
`id` int(11) NOT NULL auto_increment,
|
60
|
+
`phone_number` varchar(50) NOT NULL,
|
61
|
+
`person_id` int(11) NOT NULL,
|
62
|
+
PRIMARY KEY (`id`)
|
63
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
64
|
+
|
65
|
+
DROP TABLE IF EXISTS `alphas`;
|
66
|
+
|
67
|
+
CREATE TABLE `alphas` (
|
68
|
+
`id` int(11) NOT NULL auto_increment,
|
69
|
+
`name` varchar(50) NOT NULL,
|
70
|
+
`value` int(11),
|
71
|
+
`cost` decimal(10,6),
|
72
|
+
PRIMARY KEY (`id`)
|
73
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
74
|
+
|
75
|
+
DROP TABLE IF EXISTS `betas`;
|
76
|
+
|
77
|
+
CREATE TABLE `betas` (
|
78
|
+
`id` int(11) NOT NULL auto_increment,
|
79
|
+
`name` varchar(50) NOT NULL,
|
80
|
+
`alpha_id` int(11),
|
81
|
+
`delta` tinyint(1) NOT NULL DEFAULT 0,
|
82
|
+
PRIMARY KEY (`id`)
|
83
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
84
|
+
|
85
|
+
DROP TABLE IF EXISTS `gammas`;
|
86
|
+
|
87
|
+
CREATE TABLE `gammas` (
|
88
|
+
`id` int(11) NOT NULL auto_increment,
|
89
|
+
`name` varchar(50) NOT NULL,
|
90
|
+
`value` int(11),
|
91
|
+
`beta_id` int(11),
|
92
|
+
PRIMARY KEY (`id`)
|
93
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
94
|
+
|
95
|
+
DROP TABLE IF EXISTS `thetas`;
|
96
|
+
|
97
|
+
CREATE TABLE `thetas` (
|
98
|
+
`id` int(11) NOT NULL auto_increment,
|
99
|
+
`name` varchar(50) NOT NULL,
|
100
|
+
`value` int(11),
|
101
|
+
`alpha_id` int(11),
|
102
|
+
PRIMARY KEY (`id`)
|
103
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
104
|
+
|
105
|
+
DROP TABLE IF EXISTS `searches`;
|
106
|
+
|
107
|
+
CREATE TABLE `searches` (
|
108
|
+
`id` int(11) NOT NULL auto_increment,
|
109
|
+
`name` varchar(50) NOT NULL,
|
110
|
+
PRIMARY KEY (`id`)
|
111
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
112
|
+
|
113
|
+
DROP TABLE IF EXISTS `tags`;
|
114
|
+
|
115
|
+
CREATE TABLE `tags` (
|
116
|
+
`id` int(11) NOT NULL auto_increment,
|
117
|
+
`person_id` int(11) NOT NULL,
|
118
|
+
`football_team_id` int(11) NOT NULL,
|
119
|
+
`cricket_team_id` int(11) NOT NULL,
|
120
|
+
`name` varchar(50) NOT NULL,
|
121
|
+
PRIMARY KEY (`id`)
|
122
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
123
|
+
|
124
|
+
DROP TABLE IF EXISTS `links`;
|
125
|
+
|
126
|
+
CREATE TABLE `links` (
|
127
|
+
`id` int(11) NOT NULL auto_increment,
|
128
|
+
`url` varchar(50) NOT NULL,
|
129
|
+
`description` varchar(200),
|
130
|
+
PRIMARY KEY (`id`)
|
131
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
132
|
+
|
133
|
+
DROP TABLE IF EXISTS `links_people`;
|
134
|
+
|
135
|
+
CREATE TABLE `links_people` (
|
136
|
+
`link_id` int(11) NOT NULL,
|
137
|
+
`person_id` int(11) NOT NULL
|
138
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
139
|
+
|
140
|
+
DROP TABLE IF EXISTS `big_foos`;
|
141
|
+
|
142
|
+
CREATE TABLE `big_foos` (
|
143
|
+
`id` bigint NOT NULL auto_increment,
|
144
|
+
`name` varchar(50) NOT NULL,
|
145
|
+
PRIMARY KEY (`id`)
|
146
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|