|
@@ -4,7 +4,7 @@ require_relative 'connect'
|
4
|
4
|
|
5
|
5
|
def migrate
|
6
|
6
|
db = connect
|
7
|
|
- db.create_table :threads do
|
|
7
|
+ db.create_table? :threads do
|
8
|
8
|
primary_key :id
|
9
|
9
|
String :title
|
10
|
10
|
String :creator, index: true
|
|
@@ -14,16 +14,19 @@ def migrate
|
14
|
14
|
DateTime :created_at, index: true
|
15
|
15
|
end
|
16
|
16
|
|
17
|
|
- db.create_table :posts do
|
|
17
|
+ db.create_table? :posts do
|
18
|
18
|
primary_key :id
|
19
|
19
|
String :body
|
20
|
20
|
String :creator, index: true
|
21
|
21
|
Integer :remote_id, index: true, unique: true
|
22
|
22
|
foreign_key :thread_id, :threads
|
23
|
23
|
DateTime :created_at, index: true
|
|
24
|
+ column :tsv, 'tsvector'
|
24
|
25
|
end
|
25
|
26
|
|
26
|
|
- db.create_function(:update_last_post, <<-SQL, language: :plpgsql, returns: :trigger)
|
|
27
|
+ db.run('CREATE INDEX tsv_idx ON posts USING gin(tsv);')
|
|
28
|
+
|
|
29
|
+ db.create_function?(:update_last_post, <<-SQL, language: :plpgsql, returns: :trigger)
|
27
|
30
|
BEGIN
|
28
|
31
|
UPDATE threads
|
29
|
32
|
SET
|
|
@@ -35,10 +38,24 @@ def migrate
|
35
|
38
|
END
|
36
|
39
|
SQL
|
37
|
40
|
|
|
41
|
+ db.create_function?(:set_posts_tsv, <<-SQL, language: :plpgsql, returns: :trigger)
|
|
42
|
+ BEGIN
|
|
43
|
+ NEW.tsv = to_tsvector(new.body);
|
|
44
|
+ RETURN NEW;
|
|
45
|
+ END
|
|
46
|
+ SQL
|
|
47
|
+
|
38
|
48
|
db.run(<<-SQL)
|
39
|
49
|
CREATE TRIGGER update_last_post
|
40
|
50
|
AFTER INSERT ON posts
|
41
|
51
|
FOR EACH ROW
|
42
|
52
|
EXECUTE PROCEDURE update_last_post();
|
43
|
53
|
SQL
|
|
54
|
+
|
|
55
|
+ db.run(<<-SQL)
|
|
56
|
+ CREATE TRIGGER set_posts_tsv
|
|
57
|
+ BEFORE INSERT OR UPDATE ON posts
|
|
58
|
+ FOR EACH ROW
|
|
59
|
+ EXECUTE PROCEDURE set_posts_tsv();
|
|
60
|
+ SQL
|
44
|
61
|
end
|