@@ -4,6 +4,7 @@ use error::Result as CratesfyiResult;
4
4
use postgres:: { Connection , transaction:: Transaction , Error as PostgresError } ;
5
5
use schemamama:: { Migration , Migrator , Version } ;
6
6
use schemamama_postgres:: { PostgresAdapter , PostgresMigration } ;
7
+ use std:: borrow:: Cow ;
7
8
8
9
9
10
#[ derive( Copy , Clone ) ]
@@ -18,11 +19,13 @@ struct MigrationContext {
18
19
}
19
20
20
21
impl MigrationContext {
21
- fn format_query ( & self , query : & str ) -> String {
22
- query. replace ( "{create_table}" , match self . apply_mode {
23
- ApplyMode :: Permanent => "CREATE TABLE" ,
24
- ApplyMode :: Temporary => "CREATE TEMPORARY TABLE" ,
25
- } )
22
+ fn format_query < ' a > ( & self , query : & ' a str ) -> Cow < ' a , str > {
23
+ match self . apply_mode {
24
+ ApplyMode :: Permanent => Cow :: Borrowed ( query) ,
25
+ ApplyMode :: Temporary => {
26
+ Cow :: Owned ( query. replace ( "CREATE TABLE" , "CREATE TEMPORARY TABLE" ) )
27
+ }
28
+ }
26
29
}
27
30
}
28
31
@@ -35,7 +38,7 @@ impl MigrationContext {
35
38
/// ```
36
39
/// let my_migration = migration!(100,
37
40
/// "Create test table",
38
- /// "{create_table} test ( id SERIAL);",
41
+ /// "CREATE TABLE test ( id SERIAL);",
39
42
/// "DROP TABLE test;");
40
43
/// ```
41
44
macro_rules! migration {
@@ -79,7 +82,7 @@ fn migrate_inner(version: Option<Version>, conn: &Connection, apply_mode: ApplyM
79
82
80
83
conn. execute (
81
84
& context. format_query (
82
- "{create_table} IF NOT EXISTS database_versions (version BIGINT PRIMARY KEY);"
85
+ "CREATE TABLE IF NOT EXISTS database_versions (version BIGINT PRIMARY KEY);"
83
86
) ,
84
87
& [ ] ,
85
88
) ?;
@@ -95,7 +98,7 @@ fn migrate_inner(version: Option<Version>, conn: &Connection, apply_mode: ApplyM
95
98
// description
96
99
"Initial database schema" ,
97
100
// upgrade query
98
- "{create_table} crates (
101
+ "CREATE TABLE crates (
99
102
id SERIAL PRIMARY KEY,
100
103
name VARCHAR(255) UNIQUE NOT NULL,
101
104
latest_version_id INT DEFAULT 0,
@@ -109,7 +112,7 @@ fn migrate_inner(version: Option<Version>, conn: &Connection, apply_mode: ApplyM
109
112
github_last_update TIMESTAMP,
110
113
content tsvector
111
114
);
112
- {create_table} releases (
115
+ CREATE TABLE releases (
113
116
id SERIAL PRIMARY KEY,
114
117
crate_id INT NOT NULL REFERENCES crates(id),
115
118
version VARCHAR(100),
@@ -138,40 +141,40 @@ fn migrate_inner(version: Option<Version>, conn: &Connection, apply_mode: ApplyM
138
141
default_target VARCHAR(100),
139
142
UNIQUE (crate_id, version)
140
143
);
141
- {create_table} authors (
144
+ CREATE TABLE authors (
142
145
id SERIAL PRIMARY KEY,
143
146
name VARCHAR(255),
144
147
email VARCHAR(255),
145
148
slug VARCHAR(255) UNIQUE NOT NULL
146
149
);
147
- {create_table} author_rels (
150
+ CREATE TABLE author_rels (
148
151
rid INT REFERENCES releases(id),
149
152
aid INT REFERENCES authors(id),
150
153
UNIQUE(rid, aid)
151
154
);
152
- {create_table} keywords (
155
+ CREATE TABLE keywords (
153
156
id SERIAL PRIMARY KEY,
154
157
name VARCHAR(255),
155
158
slug VARCHAR(255) NOT NULL UNIQUE
156
159
);
157
- {create_table} keyword_rels (
160
+ CREATE TABLE keyword_rels (
158
161
rid INT REFERENCES releases(id),
159
162
kid INT REFERENCES keywords(id),
160
163
UNIQUE(rid, kid)
161
164
);
162
- {create_table} owners (
165
+ CREATE TABLE owners (
163
166
id SERIAL PRIMARY KEY,
164
167
login VARCHAR(255) NOT NULL UNIQUE,
165
168
avatar VARCHAR(255),
166
169
name VARCHAR(255),
167
170
email VARCHAR(255)
168
171
);
169
- {create_table} owner_rels (
172
+ CREATE TABLE owner_rels (
170
173
cid INT REFERENCES releases(id),
171
174
oid INT REFERENCES owners(id),
172
175
UNIQUE(cid, oid)
173
176
);
174
- {create_table} builds (
177
+ CREATE TABLE builds (
175
178
id SERIAL,
176
179
rid INT NOT NULL REFERENCES releases(id),
177
180
rustc_version VARCHAR(100) NOT NULL,
@@ -180,22 +183,22 @@ fn migrate_inner(version: Option<Version>, conn: &Connection, apply_mode: ApplyM
180
183
build_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
181
184
output TEXT
182
185
);
183
- {create_table} queue (
186
+ CREATE TABLE queue (
184
187
id SERIAL,
185
188
name VARCHAR(255),
186
189
version VARCHAR(100),
187
190
attempt INT DEFAULT 0,
188
191
date_added TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
189
192
UNIQUE(name, version)
190
193
);
191
- {create_table} files (
194
+ CREATE TABLE files (
192
195
path VARCHAR(4096) NOT NULL PRIMARY KEY,
193
196
mime VARCHAR(100) NOT NULL,
194
197
date_added TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
195
198
date_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
196
199
content BYTEA
197
200
);
198
- {create_table} config (
201
+ CREATE TABLE config (
199
202
name VARCHAR(100) NOT NULL PRIMARY KEY,
200
203
value JSON NOT NULL
201
204
);
@@ -223,7 +226,7 @@ fn migrate_inner(version: Option<Version>, conn: &Connection, apply_mode: ApplyM
223
226
// description
224
227
"Added sandbox_overrides table" ,
225
228
// upgrade query
226
- "{create_table} sandbox_overrides (
229
+ "CREATE TABLE sandbox_overrides (
227
230
crate_name VARCHAR NOT NULL PRIMARY KEY,
228
231
max_memory_bytes INTEGER,
229
232
timeout_seconds INTEGER
0 commit comments