Skip to content

Commit d9e2cf2

Browse files
authored
Merge pull request #49 from belchior/mysql-create-table
Mysql create table
2 parents 824ea78 + 3bf7975 commit d9e2cf2

File tree

1 file changed

+116
-35
lines changed

1 file changed

+116
-35
lines changed

tests/command_create_table_spec.rs

Lines changed: 116 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,111 @@
1+
#[cfg(any(feature = "postgresql", feature = "sqlite", feature = "mysql"))]
2+
mod full_api {
3+
use pretty_assertions::assert_eq;
4+
use sql_query_builder as sql;
5+
6+
#[cfg(feature = "postgresql")]
7+
#[test]
8+
fn postgres_with_all_methods() {
9+
let query = sql::CreateTable::new()
10+
// at least one of methods
11+
.create_table("users")
12+
.create_table_if_not_exists("users")
13+
// optional methods
14+
.column("id serial, login varchar(100) not null")
15+
.primary_key("(id)")
16+
.foreign_key("(address_id) references addresses(id)")
17+
.constraint("login users_login_key unique(login)")
18+
.as_string();
19+
20+
let expected_query = "\
21+
CREATE TABLE IF NOT EXISTS users (\
22+
id serial, login varchar(100) not null, \
23+
PRIMARY KEY(id), \
24+
CONSTRAINT login users_login_key unique(login), \
25+
FOREIGN KEY(address_id) references addresses(id)\
26+
)\
27+
";
28+
29+
assert_eq!(expected_query, query);
30+
}
31+
32+
#[cfg(feature = "sqlite")]
33+
#[test]
34+
fn sqlite_with_all_methods() {
35+
let query = sql::CreateTable::new()
36+
// at least one of methods
37+
.create_table("users")
38+
.create_table_if_not_exists("users")
39+
// required methods
40+
.column("id integer, login varchar(100) not null")
41+
// optional methods
42+
.primary_key("(id)")
43+
.foreign_key("(address_id) references addresses(id)")
44+
.constraint("login users_login_key unique(login)")
45+
.as_string();
46+
47+
let expected_query = "\
48+
CREATE TABLE IF NOT EXISTS users (\
49+
id integer, login varchar(100) not null, \
50+
PRIMARY KEY(id), \
51+
CONSTRAINT login users_login_key unique(login), \
52+
FOREIGN KEY(address_id) references addresses(id)\
53+
)\
54+
";
55+
56+
assert_eq!(expected_query, query);
57+
}
58+
59+
#[cfg(feature = "mysql")]
60+
#[test]
61+
fn mysql_with_all_methods() {
62+
let query = sql::CreateTable::new()
63+
// at least one of methods
64+
.create_table("users")
65+
.create_table_if_not_exists("users")
66+
// optional methods
67+
.column("id int not null auto_increment, login varchar(100) not null")
68+
.primary_key("(id)")
69+
.foreign_key("(address_id) references addresses(id)")
70+
.constraint("login users_login_key unique(login)")
71+
.as_string();
72+
73+
let expected_query = "\
74+
CREATE TABLE IF NOT EXISTS users (\
75+
id int not null auto_increment, login varchar(100) not null, \
76+
PRIMARY KEY(id), \
77+
CONSTRAINT login users_login_key unique(login), \
78+
FOREIGN KEY(address_id) references addresses(id)\
79+
)\
80+
";
81+
82+
assert_eq!(expected_query, query);
83+
}
84+
}
85+
186
mod builder_features {
287
use pretty_assertions::assert_eq;
388
use sql_query_builder as sql;
489

590
#[test]
691
fn create_table_builder_should_be_displayable() {
7-
let create_table = sql::CreateTable::new()
8-
.create_table("orders")
9-
.column("id serial not null");
92+
let create_table = sql::CreateTable::new().create_table("orders").column("id int not null");
1093

1194
println!("{}", create_table);
1295

1396
let query = create_table.as_string();
14-
let expected_query = "CREATE TABLE orders (id serial not null)";
97+
let expected_query = "CREATE TABLE orders (id int not null)";
1598

1699
assert_eq!(expected_query, query);
17100
}
18101

19102
#[test]
20103
fn create_table_builder_should_be_debuggable() {
21-
let create_table = sql::CreateTable::new()
22-
.create_table("orders")
23-
.column("id serial not null");
104+
let create_table = sql::CreateTable::new().create_table("orders").column("id int not null");
24105

25106
println!("{:?}", create_table);
26107

27-
let expected_query = "CREATE TABLE orders (id serial not null)";
108+
let expected_query = "CREATE TABLE orders (id int not null)";
28109
let query = create_table.as_string();
29110

30111
assert_eq!(expected_query, query);
@@ -33,7 +114,7 @@ mod builder_features {
33114
#[test]
34115
fn create_table_builder_should_be_cloneable() {
35116
let basic_table = sql::CreateTable::new()
36-
.column("id serial")
117+
.column("id int")
37118
.column("created_at timestamp")
38119
.column("updated_at timestamp");
39120

@@ -45,7 +126,7 @@ mod builder_features {
45126

46127
let expected_users_table = "\
47128
CREATE TABLE users (\
48-
id serial, \
129+
id int, \
49130
created_at timestamp, \
50131
updated_at timestamp, \
51132
login varchar(40)\
@@ -60,7 +141,7 @@ mod builder_features {
60141

61142
let expected_orders_table = "\
62143
CREATE TABLE orders (\
63-
id serial, \
144+
id int, \
64145
created_at timestamp, \
65146
updated_at timestamp, \
66147
name varchar(200)\
@@ -76,11 +157,11 @@ mod builder_features {
76157
let mut create_table = sql::CreateTable::new().create_table("orders");
77158

78159
if true {
79-
create_table = create_table.column("id serial");
160+
create_table = create_table.column("id int");
80161
}
81162

82163
let query = create_table.as_string();
83-
let expected_query = "CREATE TABLE orders (id serial)";
164+
let expected_query = "CREATE TABLE orders (id int)";
84165

85166
assert_eq!(expected_query, query);
86167
}
@@ -92,7 +173,7 @@ mod builder_features {
92173
}
93174

94175
fn columns(select: sql::CreateTable) -> sql::CreateTable {
95-
select.column("id serial").column("login varchar(40)")
176+
select.column("id int").column("login varchar(40)")
96177
}
97178

98179
fn constraint(select: sql::CreateTable) -> sql::CreateTable {
@@ -114,7 +195,7 @@ mod builder_features {
114195

115196
let expected_query = "\
116197
CREATE TABLE users (\
117-
id serial, \
198+
id int, \
118199
login varchar(40), \
119200
CONSTRAINT users_id_key primary key(id), \
120201
CONSTRAINT users_login_key unique(login)\
@@ -149,7 +230,7 @@ mod builder_methods {
149230
fn method_debug_should_print_at_console_in_a_human_readable_format() {
150231
let query = sql::CreateTable::new()
151232
.create_table_if_not_exists("users")
152-
.column("id serial not null")
233+
.column("id int not null")
153234
.column("login varchar(40) not null")
154235
.constraint("users_id_key primary key(id)")
155236
.constraint("users_login_key unique(login)")
@@ -158,7 +239,7 @@ mod builder_methods {
158239

159240
let expected_query = "\
160241
CREATE TABLE IF NOT EXISTS users (\
161-
id serial not null, \
242+
id int not null, \
162243
login varchar(40) not null, \
163244
CONSTRAINT users_id_key primary key(id), \
164245
CONSTRAINT users_login_key unique(login)\
@@ -172,7 +253,7 @@ mod builder_methods {
172253
fn method_print_should_print_in_one_line_the_current_state_of_builder() {
173254
let query = sql::CreateTable::new()
174255
.create_table_if_not_exists("users")
175-
.column("id serial not null")
256+
.column("id int not null")
176257
.column("login varchar(40) not null")
177258
.constraint("users_id_key primary key(id)")
178259
.constraint("users_login_key unique(login)")
@@ -181,7 +262,7 @@ mod builder_methods {
181262

182263
let expected_query = "\
183264
CREATE TABLE IF NOT EXISTS users (\
184-
id serial not null, \
265+
id int not null, \
185266
login varchar(40) not null, \
186267
CONSTRAINT users_id_key primary key(id), \
187268
CONSTRAINT users_login_key unique(login)\
@@ -206,10 +287,10 @@ mod builder_methods {
206287
fn method_raw_should_accumulate_values_on_consecutive_calls() {
207288
let query = sql::CreateTable::new()
208289
.raw("create table local temp users (")
209-
.raw("id serial)")
290+
.raw("id int)")
210291
.as_string();
211292

212-
let expected_query = "create table local temp users ( id serial)";
293+
let expected_query = "create table local temp users ( id int)";
213294

214295
assert_eq!(expected_query, query);
215296
}
@@ -219,11 +300,11 @@ mod builder_methods {
219300
let query = sql::CreateTable::new()
220301
.raw("")
221302
.raw("create table local temp users (")
222-
.raw("id serial)")
303+
.raw("id int)")
223304
.raw("")
224305
.as_string();
225306

226-
let expected_query = "create table local temp users ( id serial)";
307+
let expected_query = "create table local temp users ( id int)";
227308

228309
assert_eq!(expected_query, query);
229310
}
@@ -255,19 +336,19 @@ mod builder_methods {
255336
#[test]
256337
fn method_raw_after_should_trim_space_of_the_argument() {
257338
let query = sql::CreateTable::new()
258-
.raw_after(sql::CreateTableParams::Column, " id serial not null ")
339+
.raw_after(sql::CreateTableParams::Column, " id int not null ")
259340
.as_string();
260-
let expected_query = "(id serial not null)";
341+
let expected_query = "(id int not null)";
261342

262343
assert_eq!(expected_query, query);
263344
}
264345

265346
#[test]
266347
fn method_raw_before_should_trim_space_of_the_argument() {
267348
let query = sql::CreateTable::new()
268-
.raw_before(sql::CreateTableParams::Column, " id serial not null ")
349+
.raw_before(sql::CreateTableParams::Column, " id int not null ")
269350
.as_string();
270-
let expected_query = "(id serial not null)";
351+
let expected_query = "(id int not null)";
271352

272353
assert_eq!(expected_query, query);
273354
}
@@ -331,26 +412,26 @@ mod method_column {
331412

332413
#[test]
333414
fn method_raw_after_should_add_raw_sql_after_column_parameter() {
334-
let raw = ", id serial not null";
415+
let raw = ", id int not null";
335416
let query = sql::CreateTable::new()
336417
.column("name varchar(100)")
337418
.raw_after(sql::CreateTableParams::Column, raw)
338419
.as_string();
339420

340-
let expected_query = "(name varchar(100), id serial not null)";
421+
let expected_query = "(name varchar(100), id int not null)";
341422

342423
assert_eq!(expected_query, query);
343424
}
344425

345426
#[test]
346427
fn method_raw_before_should_add_raw_sql_before_column_parameter() {
347-
let raw = "id serial not null, ";
428+
let raw = "id int not null, ";
348429
let query = sql::CreateTable::new()
349430
.raw_before(sql::CreateTableParams::Column, raw)
350431
.column("name varchar(100)")
351432
.as_string();
352433

353-
let expected_query = "(id serial not null, name varchar(100))";
434+
let expected_query = "(id int not null, name varchar(100))";
354435

355436
assert_eq!(expected_query, query);
356437
}
@@ -420,13 +501,13 @@ mod method_constraint {
420501

421502
#[test]
422503
fn method_raw_after_should_add_raw_sql_after_table_constraint_parameter() {
423-
let raw = ", id serial not null";
504+
let raw = ", id int not null";
424505
let query = sql::CreateTable::new()
425506
.constraint("id users_id_key primary key(id)")
426507
.raw_after(sql::CreateTableParams::Constraint, raw)
427508
.as_string();
428509

429-
let expected_query = "(CONSTRAINT id users_id_key primary key(id), id serial not null)";
510+
let expected_query = "(CONSTRAINT id users_id_key primary key(id), id int not null)";
430511

431512
assert_eq!(expected_query, query);
432513
}
@@ -666,13 +747,13 @@ mod method_primary_key {
666747

667748
#[test]
668749
fn method_raw_after_should_add_raw_sql_after_primary_key_constraint() {
669-
let raw = ", id serial not null";
750+
let raw = ", id int not null";
670751
let query = sql::CreateTable::new()
671752
.primary_key("id")
672753
.raw_after(sql::CreateTableParams::PrimaryKey, raw)
673754
.as_string();
674755

675-
let expected_query = "(PRIMARY KEY(id), id serial not null)";
756+
let expected_query = "(PRIMARY KEY(id), id int not null)";
676757

677758
assert_eq!(expected_query, dbg!(query));
678759
}

0 commit comments

Comments
 (0)