@@ -40,7 +40,8 @@ function count_allocs(f, args...)
4040 return Base. gc_alloc_count (stats. gcstats)
4141end
4242
43- @testset " LibPQ" begin
43+ usenonblocking = get (ENV , " usenonblocking" , false )
44+ @testset " LibPQ $(usenonblocking ? " (nonblocking connection)" : " " ) " begin
4445
4546@testset " ConninfoDisplay" begin
4647 @test parse (LibPQ. ConninfoDisplay, " " ) == LibPQ. Normal
8283
8384 @testset " Example SELECT" begin
8485 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= false )
86+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
8587 @test conn isa LibPQ. Connection
8688 @test isopen (conn)
8789 @test status (conn) == LibPQ. libpq_c. CONNECTION_OK
190192
191193 @testset " Example INSERT and DELETE" begin
192194 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
195+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
193196
194197 result = execute (conn, """
195198 CREATE TEMPORARY TABLE libpqjl_test (
333336 @testset " load!" begin
334337 @testset " issue #204" begin
335338 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
339+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
336340
337341 close (execute (conn, """
338342 CREATE TEMPORARY TABLE libpqjl_test (
357361 @testset " COPY FROM" begin
358362 @testset " Example COPY FROM" begin
359363 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
364+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
360365
361366 result = execute (conn, """
362367 CREATE TEMPORARY TABLE libpqjl_test (
401406
402407 @testset " Wrong column order" begin
403408 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
409+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
404410
405411 result = execute (conn, """
406412 CREATE TEMPORARY TABLE libpqjl_test (
458464 local saved_conn
459465
460466 was_open = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true ) do jl_conn
467+ LibPQ. setnonblocking (jl_conn, nonblock= usenonblocking)
461468 saved_conn = jl_conn
462469 return isopen (jl_conn)
463470 end
466473 @test ! isopen (saved_conn)
467474
468475 @test_throws LibPQ. Errors. PQConnectionError LibPQ. Connection (" dbname=123fake user=$DATABASE_USER " ; throw_error= true ) do jl_conn
476+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
469477 saved_conn = jl_conn
470478 @test false
471479 end
@@ -475,13 +483,15 @@ end
475483
476484 @testset " Version Numbers" begin
477485 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
486+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
478487
479488 # update this test before PostgreSQL 20.0 ;)
480489 @test LibPQ. pqv " 7" <= LibPQ. server_version (conn) <= LibPQ. pqv " 20"
481490 end
482491
483492 @testset " Encoding" begin
484493 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
494+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
485495
486496 @test LibPQ. encoding (conn) == " UTF8"
487497
513523 throw_error= true ,
514524 type_map= Dict (:interval => String),
515525 )
526+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
516527
517528 conn_info = LibPQ. conninfo (conn)
518529 options = first (filter (conn_info) do conn_opt
632643 @testset " Finalizer" begin
633644 closed_flags = map (1 : 50 ) do _
634645 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
646+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
647+
635648 closed = conn. closed
636649 finalize (conn)
637650 return closed
646659
647660 closed_flags = map (1 : 50 ) do _
648661 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
662+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
663+
649664 push! (results, execute (conn, " SELECT 1;" ))
650665 return conn. closed
651666 end
661676 # with AsyncResults, which hold a reference to Connection
662677 closed_flags = asyncmap (1 : 50 ) do _
663678 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
679+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
680+
664681 wait (async_execute (conn, " SELECT pg_sleep(1);" ))
665682 return conn. closed
666683 end
707724
708725 @testset " throw_error=false" begin
709726 conn = LibPQ. Connection (" dbname=123fake user=$DATABASE_USER " ; throw_error= false )
727+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
728+
710729 @test conn isa LibPQ. Connection
711730 @test status (conn) == LibPQ. libpq_c. CONNECTION_BAD
712731 @test isopen (conn)
725744 @test_throws LibPQ. Errors. PQConnectionError LibPQ. Connection (" dbname=123fake user=$DATABASE_USER " ; throw_error= true )
726745
727746 conn = LibPQ. Connection (" dbname=123fake user=$DATABASE_USER " ; throw_error= false )
747+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
748+
728749 @test conn isa LibPQ. Connection
729750 @test status (conn) == LibPQ. libpq_c. CONNECTION_BAD
730751 @test isopen (conn)
740761 @testset " Results" begin
741762 @testset " Nulls" begin
742763 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
764+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
743765
744766 result = execute (conn, " SELECT NULL" ; throw_error= true )
745767 @test status (result) == LibPQ. libpq_c. PGRES_TUPLES_OK
824846
825847 @testset " Not Nulls" begin
826848 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
849+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
827850
828851 result = execute (conn, " SELECT NULL" ; not_null= [false ], throw_error= true )
829852 @test status (result) == LibPQ. libpq_c. PGRES_TUPLES_OK
949972
950973 @testset " Tables.jl" begin
951974 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
975+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
952976
953977 result = execute (conn, """
954978 SELECT no_nulls, yes_nulls FROM (
9911015
9921016 @testset " Duplicate names" begin
9931017 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1018+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
9941019
9951020 result = execute (conn, " SELECT 1 AS col, 2 AS col;" , not_null= true , throw_error= true )
9961021 columns = Tables. columns (result)
@@ -1007,6 +1032,7 @@ end
10071032
10081033 @testset " Uppercase Columns" begin
10091034 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1035+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
10101036
10111037 result = execute (conn, " SELECT 1 AS \" Column\" ;" )
10121038 @test num_columns (result) == 1
@@ -1025,6 +1051,7 @@ end
10251051
10261052 @testset " PQResultError" begin
10271053 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1054+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
10281055
10291056 try
10301057 execute (conn, " SELECT log(-1);" )
@@ -1072,6 +1099,7 @@ end
10721099 @testset " Type Conversions" begin
10731100 @testset " Deprecations" begin
10741101 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1102+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
10751103
10761104 result = execute (conn, " SELECT 'infinity'::timestamp;" )
10771105
@@ -1089,6 +1117,7 @@ end
10891117
10901118 @testset " Automatic" begin
10911119 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1120+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
10921121
10931122 result = execute (conn, """
10941123 SELECT oid, typname, typlen, typbyval, typcategory
@@ -1120,6 +1149,7 @@ end
11201149
11211150 @testset " Overrides" begin
11221151 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1152+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
11231153
11241154 result = execute (conn, " SELECT 4::bigint;" )
11251155 @test first (first (result)) === Int64 (4 )
@@ -1169,6 +1199,7 @@ end
11691199 @testset for binary_format in (LibPQ. TEXT, LibPQ. BINARY)
11701200 @testset " Default Types" begin
11711201 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1202+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
11721203
11731204 test_data = [
11741205 (" 3" , Cint (3 )),
@@ -1335,6 +1366,7 @@ end
13351366
13361367 @testset " Specified Types" begin
13371368 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1369+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
13381370
13391371 test_data = [
13401372 (" 3" , UInt, UInt (3 )),
@@ -1428,6 +1460,7 @@ end
14281460
14291461 @testset " Parameters" begin
14301462 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1463+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
14311464
14321465 @testset " Arrays" begin
14331466 tests = (
@@ -1542,6 +1575,7 @@ end
15421575
15431576 @testset " SQLString" begin
15441577 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
1578+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
15451579
15461580 execute (conn, sql ```
15471581 CREATE TEMPORARY TABLE libpq_test_users (
@@ -1577,6 +1611,7 @@ end
15771611 @testset " Query Errors" begin
15781612 @testset " Syntax Errors" begin
15791613 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1614+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
15801615
15811616 result = execute (conn, " SELORCT NUUL;" ; throw_error= false )
15821617 @test status (result) == LibPQ. libpq_c. PGRES_FATAL_ERROR
@@ -1595,6 +1630,7 @@ end
15951630
15961631 @testset " Wrong No. Parameters" begin
15971632 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1633+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
15981634
15991635 result = execute (conn, " SELORCT \$ 1;" , String[]; throw_error= false )
16001636 @test status (result) == LibPQ. libpq_c. PGRES_FATAL_ERROR
@@ -1619,6 +1655,7 @@ end
16191655
16201656 @testset " Interface Errors" begin
16211657 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1658+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
16221659
16231660 result = execute (
16241661 conn,
@@ -1652,6 +1689,7 @@ end
16521689
16531690 # Establish connection and construct temporary table.
16541691 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " )
1692+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
16551693
16561694 # Get the column.
16571695 result = execute (
@@ -1678,6 +1716,7 @@ end
16781716 @testset " Statements" begin
16791717 @testset " No Params, Output" begin
16801718 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1719+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
16811720
16821721 stmt = prepare (conn, " SELECT oid, typname FROM pg_type" )
16831722
@@ -1699,6 +1738,7 @@ end
16991738
17001739 @testset " Params, Output" begin
17011740 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1741+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
17021742
17031743 stmt = prepare (conn, " SELECT oid, typname FROM pg_type WHERE oid = \$ 1" )
17041744
@@ -1723,11 +1763,13 @@ end
17231763 end
17241764 end
17251765
1726- @testset " AsyncResults" begin
1766+ @testset " AsyncResults (usenonblocking connection=$usenonblocking )" for usenonblocking in [true , false ]
1767+ @info " usenonblocking" usenonblocking
17271768 trywait (ar:: LibPQ.AsyncResult ) = (try wait (ar) catch end ; nothing )
17281769
17291770 @testset " Basic" begin
17301771 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1772+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
17311773
17321774 ar = async_execute (conn, " SELECT pg_sleep(2);" ; throw_error= false )
17331775 yield ()
@@ -1750,6 +1792,7 @@ end
17501792
17511793 @testset " Parameters" begin
17521794 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1795+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
17531796
17541797 ar = async_execute (
17551798 conn,
@@ -1782,6 +1825,7 @@ end
17821825 # Ensures queries wait for previous query completion before starting
17831826 @testset " Wait in line to complete" begin
17841827 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1828+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
17851829
17861830 first_ar = async_execute (conn, " SELECT pg_sleep(4);" )
17871831 yield ()
@@ -1811,6 +1855,7 @@ end
18111855
18121856 @testset " Cancel" begin
18131857 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1858+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
18141859
18151860 # final query needs to be one that actually does something
18161861 # on Windows, first query also needs to do something
@@ -1843,6 +1888,7 @@ end
18431888
18441889 @testset " Canceled by closing connection" begin
18451890 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1891+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
18461892
18471893 # final query needs to be one that actually does something
18481894 # on Windows, first query also needs to do something
@@ -1875,6 +1921,7 @@ end
18751921
18761922 @testset " FDWatcher: bad file descriptor (EBADF)" begin
18771923 conn = LibPQ. Connection (" dbname=postgres user=$DATABASE_USER " ; throw_error= true )
1924+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
18781925
18791926 ar = async_execute (conn, " SELECT pg_sleep(3); SELECT * FROM pg_type;" )
18801927 yield ()
@@ -1898,6 +1945,7 @@ end
18981945 @testset " DBInterface integration" begin
18991946 conn = DBInterface. connect (LibPQ. Connection, " dbname=postgres user=$DATABASE_USER " )
19001947 @test conn isa LibPQ. Connection
1948+ LibPQ. setnonblocking (conn, nonblock= usenonblocking)
19011949
19021950 result = DBInterface. execute (
19031951 conn,
0 commit comments