Skip to content

Commit

Permalink
Merge pull request #18 from jwills/jwills_functional_tests
Browse files Browse the repository at this point in the history
Add in functional tests for the postgres server
  • Loading branch information
jwills committed May 10, 2023
2 parents eab23b7 + ea6da62 commit 87ea91a
Show file tree
Hide file tree
Showing 10 changed files with 67 additions and 11 deletions.
4 changes: 2 additions & 2 deletions buenavista/backends/duckdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,9 @@ def execute_sql(self, sql: str, params=None) -> QueryResult:
self.in_txn = True
status = "BEGIN"

logger.debug("Original SQL: ", sql)
logger.debug("Original SQL: %s", sql)
sql = self.rewrite_sql(sql)
logger.debug("Rewritten SQL: ", sql)
logger.debug("Rewritten SQL: %s", sql)
if params:
self._cursor.execute(sql, params)
else:
Expand Down
2 changes: 0 additions & 2 deletions buenavista/backends/postgres.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import io
import logging
import os
import re
from typing import Any, Dict, Iterator, List, Optional, Tuple

Expand Down
20 changes: 14 additions & 6 deletions buenavista/examples/duckdb_postgres.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import os
import sys
from typing import Tuple

import duckdb

Expand All @@ -9,14 +10,24 @@

class DuckDBPostgresRewriter(rewrite.Rewriter):
def rewrite(self, sql: str) -> str:
if sql == "select pg_catalog.version()":
if sql.lower() == "select pg_catalog.version()":
return "SELECT 'PostgreSQL 9.3' as version"
return super().rewrite(sql)
else:
return super().rewrite(sql)


rewriter = DuckDBPostgresRewriter(bv_dialects.BVPostgres(), bv_dialects.BVDuckDB())


def create(
db: duckdb.DuckDBPyConnection, host_addr: Tuple[str, int], auth: dict = None
) -> postgres.BuenaVistaServer:
server = postgres.BuenaVistaServer(
host_addr, DuckDBConnection(db), rewriter=rewriter, auth=auth
)
return server


if __name__ == "__main__":
if len(sys.argv) < 2:
print("Using in-memory DuckDB database")
Expand All @@ -35,10 +46,7 @@ def rewrite(self, sql: str) -> str:
bv_port = int(os.environ["BUENAVISTA_PORT"])

address = (bv_host, bv_port)

server = postgres.BuenaVistaServer(
address, DuckDBConnection(db), rewriter=rewriter, auth=None
)
server = create(db, address)
ip, port = server.server_address
print(f"Listening on {ip}:{port}")

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
long_description = f.read()

package_name = "buenavista"
package_version = "0.2.1"
package_version = "0.2.2"

description = """Programmable Presto and Postgres Proxies"""

Expand Down
50 changes: 50 additions & 0 deletions tests/functional/duckdb/test_postgres.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import threading

import pytest

import duckdb
import psycopg

from buenavista.examples.duckdb_postgres import create


@pytest.fixture(scope="session")
def db():
return duckdb.connect()


@pytest.fixture(scope="session")
def user_password():
return {"postgres": "postgres1729"}


@pytest.fixture(scope="session")
def duckdb_postgres_server(db, user_password):
try:
server = create(db, ("localhost", 5444), auth=user_password)
server_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = True
server_thread.start()
yield server
finally:
db.close()

@pytest.fixture(scope="session")
def conn(duckdb_postgres_server, user_password):
assert duckdb_postgres_server is not None
user, password = list(user_password.items())[0]
conn_str = f"postgresql://{user}:{password}@localhost:5444/memory"
return psycopg.connect(conn_str)


def test_select(conn):
cur = conn.cursor()
cur.execute("SELECT 1")
assert cur.fetchone() == (1,)
cur.close()

def test_pg_version(conn):
cur = conn.cursor()
cur.execute("SELECT pg_catalog.version()")
assert cur.fetchone() == ("PostgreSQL 9.3",)
cur.close()
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit 87ea91a

Please sign in to comment.