Some checks failed
Rhai Tests / Run Rhai Tests (push) Has been cancelled
- Add details about the new PostgreSQL installer feature. - Include prerequisites for installer and basic operations. - Expand test file descriptions with installer details. - Add descriptions for installer functions. - Include example usage for both basic operations and installer.
189 lines
5.6 KiB
Markdown
189 lines
5.6 KiB
Markdown
# PostgreSQL Client Module Tests
|
|
|
|
The PostgreSQL client module provides functions for connecting to and interacting with PostgreSQL databases. These tests verify the functionality of the module.
|
|
|
|
## PostgreSQL Client Features
|
|
|
|
The PostgreSQL client module provides the following features:
|
|
|
|
1. **Basic PostgreSQL Operations**: Execute queries, fetch results, etc.
|
|
2. **Connection Management**: Automatic connection handling and reconnection
|
|
3. **Builder Pattern for Configuration**: Flexible configuration with authentication support
|
|
4. **PostgreSQL Installer**: Install and configure PostgreSQL using nerdctl
|
|
5. **Database Management**: Create databases and execute SQL scripts
|
|
|
|
## Prerequisites
|
|
|
|
For basic PostgreSQL operations:
|
|
- PostgreSQL server must be running and accessible
|
|
- Environment variables should be set for connection details:
|
|
- `POSTGRES_HOST`: PostgreSQL server host (default: localhost)
|
|
- `POSTGRES_PORT`: PostgreSQL server port (default: 5432)
|
|
- `POSTGRES_USER`: PostgreSQL username (default: postgres)
|
|
- `POSTGRES_PASSWORD`: PostgreSQL password
|
|
- `POSTGRES_DB`: PostgreSQL database name (default: postgres)
|
|
|
|
For PostgreSQL installer:
|
|
- nerdctl must be installed and working
|
|
- Docker images must be accessible
|
|
- Sufficient permissions to create and manage containers
|
|
|
|
## Test Files
|
|
|
|
### 01_postgres_connection.rhai
|
|
|
|
Tests basic PostgreSQL connection and operations:
|
|
|
|
- Connecting to PostgreSQL
|
|
- Pinging the server
|
|
- Creating a table
|
|
- Inserting data
|
|
- Querying data
|
|
- Dropping a table
|
|
- Resetting the connection
|
|
|
|
### 02_postgres_installer.rhai
|
|
|
|
Tests PostgreSQL installer functionality:
|
|
|
|
- Installing PostgreSQL using nerdctl
|
|
- Creating a database
|
|
- Executing SQL scripts
|
|
- Checking if PostgreSQL is running
|
|
|
|
### run_all_tests.rhai
|
|
|
|
Runs all PostgreSQL client module tests and provides a summary of the results.
|
|
|
|
## Running the Tests
|
|
|
|
You can run the tests using the `herodo` command:
|
|
|
|
```bash
|
|
herodo --path src/rhai_tests/postgresclient/run_all_tests.rhai
|
|
```
|
|
|
|
Or run individual tests:
|
|
|
|
```bash
|
|
herodo --path src/rhai_tests/postgresclient/01_postgres_connection.rhai
|
|
```
|
|
|
|
## Available Functions
|
|
|
|
### Connection Functions
|
|
|
|
- `pg_connect()`: Connect to PostgreSQL using environment variables
|
|
- `pg_ping()`: Ping the PostgreSQL server to check if it's available
|
|
- `pg_reset()`: Reset the PostgreSQL client connection
|
|
|
|
### Query Functions
|
|
|
|
- `pg_execute(query)`: Execute a query and return the number of affected rows
|
|
- `pg_query(query)`: Execute a query and return the results as an array of maps
|
|
- `pg_query_one(query)`: Execute a query and return a single row as a map
|
|
|
|
### Installer Functions
|
|
|
|
- `pg_install(container_name, version, port, username, password)`: Install PostgreSQL using nerdctl
|
|
- `pg_create_database(container_name, db_name)`: Create a new database in PostgreSQL
|
|
- `pg_execute_sql(container_name, db_name, sql)`: Execute a SQL script in PostgreSQL
|
|
- `pg_is_running(container_name)`: Check if PostgreSQL is running
|
|
|
|
## Authentication Support
|
|
|
|
The PostgreSQL client module will support authentication using the builder pattern in a future update.
|
|
|
|
The backend implementation is ready, but the Rhai bindings are still in development.
|
|
|
|
When implemented, the builder pattern will support the following configuration options:
|
|
|
|
- Host: Set the PostgreSQL host
|
|
- Port: Set the PostgreSQL port
|
|
- User: Set the PostgreSQL username
|
|
- Password: Set the PostgreSQL password
|
|
- Database: Set the PostgreSQL database name
|
|
- Application name: Set the application name
|
|
- Connection timeout: Set the connection timeout in seconds
|
|
- SSL mode: Set the SSL mode
|
|
|
|
## Example Usage
|
|
|
|
### Basic PostgreSQL Operations
|
|
|
|
```rust
|
|
// Connect to PostgreSQL
|
|
if (pg_connect()) {
|
|
print("Connected to PostgreSQL!");
|
|
|
|
// Create a table
|
|
let create_table_query = "CREATE TABLE IF NOT EXISTS test_table (id SERIAL PRIMARY KEY, name TEXT)";
|
|
pg_execute(create_table_query);
|
|
|
|
// Insert data
|
|
let insert_query = "INSERT INTO test_table (name) VALUES ('test')";
|
|
pg_execute(insert_query);
|
|
|
|
// Query data
|
|
let select_query = "SELECT * FROM test_table";
|
|
let results = pg_query(select_query);
|
|
|
|
// Process results
|
|
for (result in results) {
|
|
print(`ID: ${result.id}, Name: ${result.name}`);
|
|
}
|
|
|
|
// Clean up
|
|
let drop_query = "DROP TABLE test_table";
|
|
pg_execute(drop_query);
|
|
}
|
|
```
|
|
|
|
### PostgreSQL Installer
|
|
|
|
```rust
|
|
// Install PostgreSQL
|
|
let container_name = "my-postgres";
|
|
let postgres_version = "15";
|
|
let postgres_port = 5432;
|
|
let postgres_user = "myuser";
|
|
let postgres_password = "mypassword";
|
|
|
|
if (pg_install(container_name, postgres_version, postgres_port, postgres_user, postgres_password)) {
|
|
print("PostgreSQL installed successfully!");
|
|
|
|
// Create a database
|
|
let db_name = "mydb";
|
|
if (pg_create_database(container_name, db_name)) {
|
|
print(`Database '${db_name}' created successfully!`);
|
|
|
|
// Execute a SQL script
|
|
let create_table_sql = `
|
|
CREATE TABLE users (
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
email TEXT UNIQUE NOT NULL
|
|
);
|
|
`;
|
|
|
|
let result = pg_execute_sql(container_name, db_name, create_table_sql);
|
|
print("Table created successfully!");
|
|
|
|
// Insert data
|
|
let insert_sql = "#
|
|
INSERT INTO users (name, email) VALUES
|
|
('John Doe', 'john@example.com'),
|
|
('Jane Smith', 'jane@example.com');
|
|
#";
|
|
|
|
result = pg_execute_sql(container_name, db_name, insert_sql);
|
|
print("Data inserted successfully!");
|
|
|
|
// Query data
|
|
let query_sql = "SELECT * FROM users;";
|
|
result = pg_execute_sql(container_name, db_name, query_sql);
|
|
print(`Query result: ${result}`);
|
|
}
|
|
}
|
|
```
|