feat(clients): professional clients with tests, CI/CD, and examples

- Python: pyproject.toml, pytest suite (unit + integration), README, examples
- JavaScript: package.json, TypeScript definitions, node:test suite, README, examples
- Nim: integration tests, examples, README, improved nimble tasks
- Rust: fixed nodelay/localhost IPv6 bug, integration tests, examples, README
- Added GitHub Actions CI for all 4 clients against Docker server
- Added docker-compose.test.yml for local integration testing
- Added .gitignore for each client
This commit is contained in:
2026-05-08 00:18:34 +03:00
parent e9d3c7e9de
commit ae2e07e626
31 changed files with 2651 additions and 12 deletions
+140
View File
@@ -0,0 +1,140 @@
#!/usr/bin/env python3
"""
BaraDB Python Client — Basic Examples
This script demonstrates common operations with the BaraDB Python client.
Run it while a BaraDB server is listening on localhost:9472.
"""
import sys
from baradb import Client, QueryBuilder, WireValue
def example_connection():
print("=== Connection ===")
client = Client("localhost", 9472)
client.connect()
print(f"Connected: {client.is_connected()}")
print(f"Ping: {client.ping()}")
client.close()
print(f"Connected after close: {client.is_connected()}")
print()
def example_context_manager():
print("=== Context Manager ===")
with Client("localhost", 9472) as client:
print(f"Inside context: {client.is_connected()}")
print(f"Ping: {client.ping()}")
print("Outside context: closed automatically")
print()
def example_simple_query():
print("=== Simple Query ===")
with Client("localhost", 9472) as client:
result = client.query("SELECT 42 as answer, 'BaraDB' as db")
print(f"Columns: {result.columns}")
print(f"Rows: {result.rows}")
print(f"Row count: {result.row_count}")
for row in result:
print(f" answer={row['answer']}, db={row['db']}")
print()
def example_parameterized_query():
print("=== Parameterized Query ===")
with Client("localhost", 9472) as client:
result = client.query_params(
"SELECT $1 as num, $2 as txt, $3 as flag",
[
WireValue.int64(123),
WireValue.string("hello world"),
WireValue.bool_val(True),
],
)
for row in result:
print(f" num={row['num']}, txt={row['txt']}, flag={row['flag']}")
print()
def example_query_builder():
print("=== Query Builder ===")
with Client("localhost", 9472) as client:
sql = (
QueryBuilder(client)
.select("id", "name")
.from_("users")
.where("active = true")
.order_by("name", "ASC")
.limit(5)
.build()
)
print(f"Generated SQL: {sql}")
print()
def example_vector():
print("=== Vector Value ===")
with Client("localhost", 9472) as client:
result = client.query_params(
"SELECT $1 as embedding",
[WireValue.vector([0.1, 0.2, 0.3, 0.4])],
)
for row in result:
print(f" embedding type: {type(row['embedding'])}")
print()
def example_ddl_dml():
print("=== DDL & DML ===")
with Client("localhost", 9472) as client:
# Clean up
try:
client.execute("DROP TABLE IF EXISTS demo_products")
except Exception as exc:
print(f"Cleanup warning: {exc}")
client.execute(
"CREATE TABLE demo_products (id INT PRIMARY KEY, name STRING, price FLOAT)"
)
affected = client.execute(
"INSERT INTO demo_products (id, name, price) VALUES (1, 'Widget', 9.99)"
)
print(f"Insert affected rows: {affected}")
result = client.query("SELECT * FROM demo_products")
print(f"Select returned {result.row_count} row(s)")
for row in result:
print(f" {row}")
client.execute("DROP TABLE demo_products")
print("Table dropped")
print()
def main():
print("BaraDB Python Client Examples")
print("Make sure BaraDB is running on localhost:9472")
print()
examples = [
example_connection,
example_context_manager,
example_simple_query,
example_parameterized_query,
example_query_builder,
example_vector,
example_ddl_dml,
]
for fn in examples:
try:
fn()
except Exception as exc:
print(f"ERROR in {fn.__name__}: {exc}", file=sys.stderr)
if __name__ == "__main__":
main()