You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ssql/tests/ansi-test.scm

59 lines
3.0 KiB
Scheme

(use test)
(import ssql)
(test-group "selects"
(test "simple query"
"SELECT actors.firstname, actors.lastname FROM actors"
(ssql->sql #f `(select (columns actors.firstname actors.lastname)
(from actors))))
(test "many columns"
"SELECT actors.id, actors.firstname, actors.lastname, roles.character, roles.movie_id AS movie FROM actors, roles"
(ssql->sql #f `(select (columns (col actors id firstname lastname) (col roles character (as movie_id movie)))
(from actors roles))))
(test "joined query"
(string-append
"SELECT actors.firstname, actors.lastname, roles.character, movies.title "
"FROM ((actors LEFT JOIN roles ON (roles.actor_id = actors.id)) "
"LEFT JOIN movies ON (movies.id = roles.movie_id))")
(ssql->sql #f `(select (columns actors.firstname actors.lastname roles.character movies.title)
(from (join left
(join left actors roles
(on (= roles.actor_id actors.id)))
movies
(on (= movies.id roles.movie_id)))))))
(test "order"
"SELECT lastname, firstname FROM people ORDER BY lastname DESC, firstname"
(ssql->sql #f '(select (columns lastname firstname) (from people) (order (desc lastname) firstname)))))
(test-group "updates"
(test "simple case"
"UPDATE actors SET firstname = 'Rube', lastname = 'Goldberg'"
(ssql->sql #f '(update actors (set (firstname "Rube") (lastname "Goldberg")))))
(test "with condition"
"UPDATE actors SET firstname = 'Felix' WHERE (lastname = 'Winkelmann')"
(ssql->sql #f '(update actors (set (firstname "Felix")) (where (= lastname "Winkelmann"))))))
(test-group "inserts"
(test "with sub-queries"
"INSERT INTO roles (character, movie_id, actor_id) VALUES ('Dr. Hasenbein', (SELECT id FROM movies WHERE (title = 'Praxis Dr. Hasenbein')), (SELECT id FROM actors WHERE ((firstname = 'Helge') AND (lastname = 'Schneider'))))"
(ssql->sql #f '(insert (into roles) (columns character movie_id actor_id)
(values "Dr. Hasenbein"
(select (columns id) (from movies) (where (= title "Praxis Dr. Hasenbein")))
(select (columns id) (from actors) (where (and (= firstname "Helge")
(= lastname "Schneider"))))))))
(test "multiple records using vectors for the records"
"INSERT INTO actors (firstname, lastname) VALUES ('Sylvester', 'Stallone'), ('Arnold', 'Schwarzenegger')"
(ssql->sql #f '(insert (into actors) (columns firstname lastname) #("Sylvester" "Stallone") #("Arnold" "Schwarzenegger"))))
(test "without explicit columns"
"INSERT INTO actors VALUES ('Marlon', 'Brando')"
(ssql->sql #f '(insert (into actors) (values "Marlon" "Brando")))))
(test-group "syntax"
(test "set literals"
"SELECT one, two FROM (1, 2)"
(ssql->sql #f '(select (columns one two) (from #(1 2))))))