mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
2.7 KiB
151 lines
2.7 KiB
package sqlparse |
|
|
|
import ( |
|
"strings" |
|
"testing" |
|
|
|
. "gopkg.in/check.v1" |
|
) |
|
|
|
func Test(t *testing.T) { TestingT(t) } |
|
|
|
type SqlParseSuite struct { |
|
} |
|
|
|
var _ = Suite(&SqlParseSuite{}) |
|
|
|
func (s *SqlParseSuite) TestSemicolons(c *C) { |
|
type testData struct { |
|
line string |
|
result bool |
|
} |
|
|
|
tests := []testData{ |
|
{ |
|
line: "END;", |
|
result: true, |
|
}, |
|
{ |
|
line: "END; -- comment", |
|
result: true, |
|
}, |
|
{ |
|
line: "END ; -- comment", |
|
result: true, |
|
}, |
|
{ |
|
line: "END -- comment", |
|
result: false, |
|
}, |
|
{ |
|
line: "END -- comment ;", |
|
result: false, |
|
}, |
|
{ |
|
line: "END \" ; \" -- comment", |
|
result: false, |
|
}, |
|
} |
|
|
|
for _, test := range tests { |
|
r := endsWithSemicolon(test.line) |
|
c.Assert(r, Equals, test.result) |
|
} |
|
} |
|
|
|
func (s *SqlParseSuite) TestSplitStatements(c *C) { |
|
type testData struct { |
|
sql string |
|
direction bool |
|
count int |
|
} |
|
|
|
tests := []testData{ |
|
{ |
|
sql: functxt, |
|
direction: true, |
|
count: 2, |
|
}, |
|
{ |
|
sql: functxt, |
|
direction: false, |
|
count: 2, |
|
}, |
|
{ |
|
sql: multitxt, |
|
direction: true, |
|
count: 2, |
|
}, |
|
{ |
|
sql: multitxt, |
|
direction: false, |
|
count: 2, |
|
}, |
|
} |
|
|
|
for _, test := range tests { |
|
stmts, err := SplitSQLStatements(strings.NewReader(test.sql), test.direction) |
|
c.Assert(err, IsNil) |
|
c.Assert(stmts, HasLen, test.count) |
|
} |
|
} |
|
|
|
var functxt = `-- +migrate Up |
|
CREATE TABLE IF NOT EXISTS histories ( |
|
id BIGSERIAL PRIMARY KEY, |
|
current_value varchar(2000) NOT NULL, |
|
created_at timestamp with time zone NOT NULL |
|
); |
|
|
|
-- +migrate StatementBegin |
|
CREATE OR REPLACE FUNCTION histories_partition_creation( DATE, DATE ) |
|
returns void AS $$ |
|
DECLARE |
|
create_query text; |
|
BEGIN |
|
FOR create_query IN SELECT |
|
'CREATE TABLE IF NOT EXISTS histories_' |
|
|| TO_CHAR( d, 'YYYY_MM' ) |
|
|| ' ( CHECK( created_at >= timestamp ''' |
|
|| TO_CHAR( d, 'YYYY-MM-DD 00:00:00' ) |
|
|| ''' AND created_at < timestamp ''' |
|
|| TO_CHAR( d + INTERVAL '1 month', 'YYYY-MM-DD 00:00:00' ) |
|
|| ''' ) ) inherits ( histories );' |
|
FROM generate_series( $1, $2, '1 month' ) AS d |
|
LOOP |
|
EXECUTE create_query; |
|
END LOOP; -- LOOP END |
|
END; -- FUNCTION END |
|
$$ |
|
language plpgsql; |
|
-- +migrate StatementEnd |
|
|
|
-- +migrate Down |
|
drop function histories_partition_creation(DATE, DATE); |
|
drop TABLE histories; |
|
` |
|
|
|
// test multiple up/down transitions in a single script |
|
var multitxt = `-- +migrate Up |
|
CREATE TABLE post ( |
|
id int NOT NULL, |
|
title text, |
|
body text, |
|
PRIMARY KEY(id) |
|
); |
|
|
|
-- +migrate Down |
|
DROP TABLE post; |
|
|
|
-- +migrate Up |
|
CREATE TABLE fancier_post ( |
|
id int NOT NULL, |
|
title text, |
|
body text, |
|
created_on timestamp without time zone, |
|
PRIMARY KEY(id) |
|
); |
|
|
|
-- +migrate Down |
|
DROP TABLE fancier_post; |
|
`
|
|
|