Skip to content

Commit

Permalink
test: add test cases for joins
Browse files Browse the repository at this point in the history
Adds test cases for simple foreign keys, many to many tables, and joins
between tables. This tests the functionality of the commutator and
hash functions for the `ulid` type in postgres.

ref: [pksunkara#13][issue]

[issue]: pksunkara#13

Signed-off-by: Jay McDoniel <jmcdo29@gmail.com>
  • Loading branch information
jmcdo29 committed Jul 23, 2023
1 parent eb8e9cf commit 6298ac3
Showing 1 changed file with 137 additions and 0 deletions.
137 changes: 137 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,143 @@ mod tests {
let result = Spi::get_one::<ulid>("SELECT gen_ulid();").unwrap();
assert!(result.is_some());
}
#[pg_test]
fn test_join() {
let result = Spi::get_one::<ulid>("CREATE TABLE foo (
id ulid DEFAULT gen_ulid()
,data TEXT
);
CREATE TABLE foobar (
id ulid DEFAULT gen_ulid()
,foo_id ulid
);
INSERT INTO foo
(data)
VALUES
('hello')
,('world');
INSERT INTO foobar
(foo_id)
VALUES
((SELECT id FROM foo WHERE data = 'hello'))
,((SELECT id FROM foo WHERE data = 'world'));
SELECT
foobar.id
, foo.data
FROM foobar
JOIN foo ON foobar.foo_id = foo.id;"
).unwrap();
assert!(result.is_some());
}

#[pg_test]
fn test_many_to_many() {
let result = Spi::get_one::<ulid>("CREATE TABLE foo (
id ulid DEFAULT gen_ulid() PRIMARY KEY
,data TEXT
);
CREATE TABLE bar (
id ulid DEFAULT gen_ulid() PRIMARY KEY
,data TEXT
);
CREATE TABLE foo_bar_mapping (
foo_id ulid,
bar_id ulid,
PRIMARY KEY (foo_id, bar_id),
FOREIGN KEY (foo_id) REFERENCES foo(id),
FOREIGN KEY (bar_id) REFERENCES bar(id)
);
INSERT INTO foo
(data)
VALUES
('hello')
,('world');
INSERT INTO bar
(data)
VALUES
('alpha')
,('beta');
INSERT INTO foo_bar_mapping
(foo_id, bar_id)
VALUES
((SELECT id FROM foo WHERE data = 'hello'), (SELECT id FROM bar WHERE data = 'alpha')),
((SELECT id FROM foo WHERE data = 'world'), (SELECT id FROM bar WHERE data = 'beta'));
SELECT
f.id as foo_id
, b.id as bar_id
, f.data as foo_data
, b.data as bar_data
FROM foo_bar_mapping fbm
JOIN foo f ON fbm.foo_id = f.id
JOIN bar b ON fbm.bar_id = b.id;"
).unwrap();
assert!(result.is_some());
}

#[pg_test]
fn test_commutator() {
let result = Spi::get_one::<ulid>("CREATE TABLE foo (
id ulid DEFAULT gen_ulid() PRIMARY KEY
,data TEXT
);
CREATE TABLE bar (
id ulid DEFAULT gen_ulid() PRIMARY KEY
,data TEXT
);
CREATE TABLE foo_bar_mapping (
foo_id ulid,
bar_id ulid,
PRIMARY KEY (foo_id, bar_id),
FOREIGN KEY (foo_id) REFERENCES foo(id),
FOREIGN KEY (bar_id) REFERENCES bar(id)
);
INSERT INTO foo
(data)
VALUES
('hello')
,('world');
INSERT INTO bar
(data)
VALUES
('alpha')
,('beta');
INSERT INTO foo_bar_mapping
(foo_id, bar_id)
VALUES
((SELECT id FROM foo WHERE data = 'hello'), (SELECT id FROM bar WHERE data = 'alpha')),
((SELECT id FROM foo WHERE data = 'world'), (SELECT id FROM bar WHERE data = 'beta'));
SELECT
f.id as foo_id
, b.id as bar_id
, f.data as foo_data
, b.data as bar_data
FROM foo_bar_mapping fbm
JOIN foo f ON fbm.foo_id = f.id
JOIN bar b ON fbm.bar_id = b.id;
SELECT
*
FROM foo_bar_mapping
Join foo on foo_bar_mapping.foo_id = foo.id
WHERE foo_bar_mapping.bar_id IN (SELECT id FROM bar);"
).unwrap();
assert!(result.is_some());
}
}

/// This module is required by `cargo pgrx test` invocations.
Expand Down

0 comments on commit 6298ac3

Please sign in to comment.