Ignore:
Timestamp:
08/19/09 21:03:09 (11 years ago)
Author:
sjamaan
Message:

Implement transaction support (including nested transactions)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/postgresql/trunk/tests/run.scm

    r14792 r15517  
    342342         (query conn
    343343                "SELECT $1::text, $2::integer UNION SELECT 'three', 4" "one" 2))))
     344
     345(test-group "transactions"
     346  (query conn "CREATE TEMP TABLE foo ( bar integer )")
     347
     348  (test-group "simple transactions"
     349    (test "Transaction inactive"
     350          #f
     351          (in-transaction? conn))
     352    (test "Transaction active"
     353          #t
     354          (with-transaction conn
     355                            (lambda () (in-transaction? conn))))
     356    (test "Successful transaction"
     357          '(1)
     358          (and
     359           (with-transaction
     360            conn (lambda ()
     361                   (query conn "INSERT INTO foo (bar) VALUES (1)")))
     362           (column-values (query conn "SELECT * FROM foo"))))
     363 
     364    (query conn "TRUNCATE foo")
     365 
     366    (test "Unsuccessful transaction"
     367          #f
     368          (with-transaction
     369           conn (lambda ()
     370                  (query conn "INSERT INTO foo (bar) VALUES (1)")
     371                  #f)))
     372
     373    (test "Empty table after unsuccessful transaction"
     374          '()
     375          (column-values (query conn "SELECT * FROM foo")))
     376
     377    (handle-exceptions exn
     378      (void)
     379      (with-transaction
     380       conn (lambda ()
     381              (query conn "INSERT INTO foo (bar) VALUES (1)")
     382              (error "oops!"))))
     383 
     384    (test "Exception during transaction causes reset"
     385          '()
     386          (column-values (query conn "SELECT * FROM foo"))))
     387
     388  (test-group "nested transactions"
     389    (test "Successful transaction"
     390          '(1 2)
     391          (and
     392           (with-transaction
     393            conn (lambda ()
     394                   (query conn "INSERT INTO foo (bar) VALUES (1)")
     395                   (with-transaction
     396                    conn (lambda ()
     397                           (query conn "INSERT INTO foo (bar) VALUES (2)")))))
     398           (column-values (query conn "SELECT * FROM foo"))))
     399   
     400    (query conn "TRUNCATE foo")
     401
     402    (test "Unsuccessful main transaction"
     403          '()
     404          (and
     405           (not
     406            (with-transaction
     407             conn (lambda ()
     408                    (query conn "INSERT INTO foo (bar) VALUES (1)")
     409                    (with-transaction
     410                     conn (lambda ()
     411                            (query conn "INSERT INTO foo (bar) VALUES (2)")))
     412                    #f)))
     413           (column-values (query conn "SELECT * FROM foo"))))
     414   
     415    (test "Unsuccessful subtransaction"
     416          '(1)
     417          (and
     418           (with-transaction
     419            conn (lambda ()
     420                   (query conn "INSERT INTO foo (bar) VALUES (1)")
     421                   (with-transaction
     422                    conn (lambda ()
     423                           (query conn "INSERT INTO foo (bar) VALUES (2)")
     424                           #f))
     425                   #t))
     426           (column-values (query conn "SELECT * FROM foo"))))
     427
     428    (query conn "TRUNCATE foo")
     429
     430    (test "Multiple subtransactions"
     431          '(1 3)
     432          (and
     433           (with-transaction
     434            conn (lambda ()
     435                   (query conn "INSERT INTO foo (bar) VALUES (1)")
     436                   (with-transaction
     437                    conn (lambda ()
     438                           (query conn "INSERT INTO foo (bar) VALUES (2)")
     439                           #f))
     440                   (with-transaction
     441                    conn (lambda ()
     442                           (query conn "INSERT INTO foo (bar) VALUES (3)")))))
     443           (column-values (query conn "SELECT * FROM foo")))))
     444  )
Note: See TracChangeset for help on using the changeset viewer.