diff --git a/collects/tests/db/db/sql-types.rkt b/collects/tests/db/db/sql-types.rkt index 1d2c294299..b1d92e4434 100644 --- a/collects/tests/db/db/sql-types.rkt +++ b/collects/tests/db/db/sql-types.rkt @@ -147,7 +147,10 @@ (when (string? len-fun) (check-equal? (query-value c (sql (format "select ~a($1)" len-fun)) str) (string-length str) - "check server-side length"))) + "check server-side length")))) + +(define-check (check-1char c str) + (check-varchar c str) (when (= (string-length str) 1) ;; - if one char, check server-side char->int (let ([ci-fun (case dbsys @@ -229,6 +232,22 @@ (,(sql-interval -87 -1 0 0 0 0 0) "-87 years -1 mons") (,(sql-interval -1 -2 3 4 5 6 45000) "-1 years -2 mons +3 days 04:05:06.000045"))) +(define some-basic-strings + `("Az0" + "this is the time to remember" + "it's like that (and that's the way it is)" + ,(string #\\) + ,(string #\\ #\\) + ,(string #\') + ,(string #\\ #\') + "λ the ultimate")) +(define some-intl-strings + `("αβψδεφγηιξκλμνοπρστθωςχυζ" + "अब्च्देघिज्क्ल्म्नोप्र्स्तुव्य्" + "شﻻؤيثبلاهتنمةىخحضقسفعرصءغئ" + "阿あでいおうわぁ" + "абцдефгхиклмнопљрстувњџзѕЋч")) + (define test (test-suite "SQL types (roundtrip, etc)" (type-test-case '(bool boolean) @@ -337,33 +356,21 @@ (lambda (c) (unless (ANYFLAGS 'isora) ;; Oracle treats empty string as NULL (?!) (check-varchar c "")) - (check-varchar c "Az0") - (check-varchar c (string #\\)) - (check-varchar c (string #\\ #\\)) - (check-varchar c (string #\')) - (check-varchar c "this is the time to remember") - (check-varchar c "it's like that (and that's the way it is)") - (check-varchar c (string #\\)) - (check-varchar c (string #\')) - (check-varchar c (string #\\ #\')) - (check-varchar c "λ the ultimate") + (for ([str some-basic-strings]) + (check-varchar c str)) + (for ([str some-intl-strings]) + (check-varchar c str) + ;; and do the extra one-char checks: + (check-1char c (substring str 0 1))) (unless (ANYFLAGS 'isora 'isdb2) (check-varchar c (make-string 800 #\a))) - (let ([strs '("αβψδεφγηιξκλμνοπρστθωςχυζ" - "अब्च्देघिज्क्ल्म्नोप्र्स्तुव्य्" - "شﻻؤيثبلاهتنمةىخحضقسفعرصءغئ" - "阿あでいおうわぁ" - "абцдефгхиклмнопљрстувњџзѕЋч")]) - (for ([s strs]) - (check-varchar c s) - ;; and do the extra one-char checks: - (check-varchar c (string (string-ref s 0)))) - (unless (ANYFLAGS 'isora 'isdb2) ;; too long - (check-varchar c (apply string-append strs)))) + (unless (ANYFLAGS 'isora 'isdb2) ;; too long + (check-varchar c (apply string-append some-intl-strings))) ;; one-char checks - (check-varchar c (string #\λ)) - (check-varchar c (make-string 1 #\u2200)) + (check-1char c (string #\λ)) + (check-1char c (make-string 1 #\u2200)) (check-varchar c (make-string 20 #\u2200)) + ;; check large strings (unless (ANYFLAGS 'isora 'isdb2) ;; too long (???) (check-varchar c (make-string 100 #\u2200))) ;; Following might not produce valid string (??)