@@ -85,10 +85,6 @@ def test_register_and_query(self):
8585 assert isinstance (result , pl .DataFrame )
8686 assert result .shape == (2 , 2 )
8787
88- def test_supports_register (self ):
89- reader = ggsql .DuckDBReader ("duckdb://memory" )
90- assert reader .supports_register () is True
91-
9288 def test_invalid_connection_string (self ):
9389 with pytest .raises (ValueError ):
9490 ggsql .DuckDBReader ("invalid://connection" )
@@ -396,25 +392,6 @@ def test_can_introspect_spec(self):
396392class TestCustomReader :
397393 """Tests for custom Python reader support."""
398394
399- def test_simple_custom_reader (self ):
400- """Custom reader with execute_sql() method works."""
401-
402- class SimpleReader :
403- def __init__ (self ):
404- self .conn = duckdb .connect ()
405- self .conn .execute (
406- "CREATE TABLE data AS SELECT * FROM ("
407- "VALUES (1, 10), (2, 20), (3, 30)"
408- ") AS t(x, y)"
409- )
410-
411- def execute_sql (self , sql : str ) -> pl .DataFrame :
412- return self .conn .execute (sql ).pl ()
413-
414- reader = SimpleReader ()
415- spec = ggsql .execute ("SELECT * FROM data VISUALISE x, y DRAW point" , reader )
416- assert spec .metadata ()["rows" ] == 3
417-
418395 def test_custom_reader_with_register (self ):
419396 """Custom reader with register() support."""
420397
@@ -425,10 +402,7 @@ def __init__(self):
425402 def execute_sql (self , sql : str ) -> pl .DataFrame :
426403 return self .conn .execute (sql ).pl ()
427404
428- def supports_register (self ) -> bool :
429- return True
430-
431- def register (self , name : str , df : pl .DataFrame ) -> None :
405+ def register (self , name : str , df : pl .DataFrame , _replace : bool ) -> None :
432406 self .conn .register (name , df )
433407
434408 reader = RegisterReader ()
@@ -479,6 +453,9 @@ def __init__(self):
479453 def execute_sql (self , sql : str ) -> pl .DataFrame :
480454 return self .conn .execute (sql ).pl ()
481455
456+ def register (self , name : str , df : pl .DataFrame , _replace : bool ) -> None :
457+ self .conn .register (name , df )
458+
482459 reader = DuckDBBackedReader ()
483460 spec = ggsql .execute (
484461 "SELECT * FROM data VISUALISE x, y, category AS color DRAW point" ,
@@ -499,15 +476,17 @@ class RecordingReader:
499476 def __init__ (self ):
500477 self .conn = duckdb .connect ()
501478 self .conn .execute (
502- "CREATE TABLE data AS SELECT * FROM ("
503- "VALUES (1, 2)) AS t(x, y)"
479+ "CREATE TABLE data AS SELECT * FROM (VALUES (1, 2)) AS t(x, y)"
504480 )
505481 self .execute_calls = []
506482
507483 def execute_sql (self , sql : str ) -> pl .DataFrame :
508484 self .execute_calls .append (sql )
509485 return self .conn .execute (sql ).pl ()
510486
487+ def register (self , name : str , df : pl .DataFrame , _replace : bool ) -> None :
488+ self .conn .register (name , df )
489+
511490 reader = RecordingReader ()
512491 ggsql .execute (
513492 "SELECT * FROM data VISUALISE x, y DRAW point" ,
@@ -530,11 +509,10 @@ def __init__(self):
530509 def execute_sql (self , sql : str ) -> pl .DataFrame :
531510 return self .con .con .execute (sql ).pl ()
532511
533- def supports_register (self ) -> bool :
534- return True
535-
536- def register (self , name : str , df : pl .DataFrame ) -> None :
537- self .con .create_table (name , df .to_arrow (), overwrite = True )
512+ def register (
513+ self , name : str , df : pl .DataFrame , replace : bool = True
514+ ) -> None :
515+ self .con .create_table (name , df .to_arrow (), overwrite = replace )
538516
539517 def unregister (self , name : str ) -> None :
540518 self .con .drop_table (name )
0 commit comments