Skip to content

Database Integration Tool

ByteBuddy's database integration functionality is implemented through the databaseClient tool, which allows you to connect to various databases and execute SQL queries for troubleshooting and data analysis.

Tool Parameters

ParameterTypeRequiredDescription
databaseTypestringYesDatabase type (postgresql, mysql, sqlite, oracle, sqlserver, mongodb, redis, clickhouse, bigquery, snowflake)
serverNamestringNoDatabase server hostname or IP address
portnumberNoDatabase server port
databasestringNoDatabase name to connect to
usernamestringNoDatabase username
passwordstringNoDatabase password
connectionStringstringNoFull connection string (alternative to individual connection parameters)
queriesstring[]NoArray of SQL queries to execute
queryFilestringNoPath to a file containing SQL queries to execute
timeoutnumberNoQuery timeout in seconds (default: 30)
outputFormatstringNoOutput format for query results (default, csv, json, vertical)
maxRowsnumberNoMaximum number of rows to return for SELECT queries (default: 1000)
dryRunbooleanNoIf true, only validates queries without executing them (default: false)

Supported Databases

Relational Databases

  • PostgreSQL (postgresql) - Full feature support with advanced SQL capabilities
  • MySQL (mysql) - Complete MySQL database support
  • SQLite (sqlite) - Lightweight file-based database support
  • SQL Server (sqlserver) - Microsoft SQL Server integration
  • Oracle (oracle) - Oracle database connectivity

Big Data & Analytics

  • ClickHouse (clickhouse) - High-performance analytical database
  • Google BigQuery (bigquery) - Cloud data warehouse
  • Snowflake (snowflake) - Cloud data platform

NoSQL Databases

  • MongoDB (mongodb) - Document database support
  • Redis (redis) - In-memory data structure store

Session Usage Examples

Direct Database Tool Usage in Chat

Users can directly request database operations in chat:

"Please help me check the number of users in our users table and view the 10 most recently registered users."

yaml
tools:
  - name: "check-users"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "localhost"
      database: "myapp"
      username: "postgres"
      password: "${DB_PASSWORD}"
      queries:
        - "SELECT COUNT(*) as total_users FROM users"
        - "SELECT id, name, email, created_at FROM users ORDER BY created_at DESC LIMIT 10"

Using with Configuration Files

Create a configuration file .bytebuddy/tools.yaml in your project to predefine database connections:

yaml
tools:
  - name: "myapp-db"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "localhost"
      database: "myapp"
      username: "postgres"
      password: "${DB_PASSWORD}"

Then reference this pre-configured tool in chat:

"Use the myapp-db tool to query our products table and find items with prices above 100."

yaml
tools:
  - name: "expensive-products"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "localhost"
      database: "myapp"
      username: "postgres"
      password: "${DB_PASSWORD}"
      queries:
        - "SELECT name, price FROM products WHERE price > 100 ORDER BY price DESC"

Getting Started

Basic Query

yaml
tools:
  - name: "basic-query"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "localhost"
      database: "myapp"
      username: "postgres"
      password: "${DB_PASSWORD}"
      queries:
        - "SELECT COUNT(*) FROM users"
        - "SELECT * FROM users ORDER BY created_at DESC LIMIT 10"

Using Connection String

yaml
tools:
  - name: "connection-string-example"
    tool: "databaseClient"
    args:
      databaseType: "mysql"
      connectionString: "mysql://user:${DB_PASSWORD}@localhost:3306/testdb"
      queries:
        - "SHOW TABLES"
        - "DESCRIBE users"

SQLite Database

yaml
tools:
  - name: "sqlite-example"
    tool: "databaseClient"
    args:
      databaseType: "sqlite"
      connectionString: "/path/to/database.db"
      queries:
        - "SELECT name FROM sqlite_master WHERE type='table'"
        - "SELECT * FROM products WHERE price > 100"

Advanced Usage

Complex Analytics

yaml
tools:
  - name: "complex-analytics"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "analytics-db.example.com"
      database: "analytics"
      username: "analyst"
      password: "${ANALYTICS_DB_PASSWORD}"
      queries:
        - "SELECT DATE_TRUNC('day', created_at) as date, COUNT(*) as signups FROM users WHERE created_at >= NOW() - INTERVAL '30 days' GROUP BY DATE_TRUNC('day', created_at) ORDER BY date"
        - "SELECT u.name, COUNT(o.id) as order_count, SUM(o.total) as total_spent FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE o.created_at >= NOW() - INTERVAL '7 days' GROUP BY u.id, u.name ORDER BY total_spent DESC LIMIT 10"
      outputFormat: "json"

File-Based Queries

yaml
tools:
  - name: "file-based-query"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "localhost"
      database: "analytics"
      username: "analyst"
      password: "${DB_PASSWORD}"
      queryFile: "/path/to/complex-analytics.sql"
      outputFormat: "csv"
      maxRows: 5000

Dry Run Mode

yaml
tools:
  - name: "dry-run-example"
    tool: "databaseClient"
    args:
      databaseType: "mysql"
      serverName: "localhost"
      database: "production"
      username: "admin"
      password: "${ADMIN_PASSWORD}"
      queries:
        - "UPDATE users SET status = 'active' WHERE last_login >= '2024-01-01'"
      dryRun: true # Only validates, doesn't execute

Security Features

Query Validation

  • SQL injection prevention
  • Dangerous operation detection
  • Privilege level checks
  • Query complexity analysis

Access Control

  • Role-based access
  • Database-specific permissions
  • Read-only mode option
  • Audit logging

Data Protection

  • Connection encryption (SSL/TLS)
  • Credential masking
  • Sensitive data filtering
  • Query result limits

Performance Optimization

Connection Pooling

  • Reuse database connections
  • Configurable pool sizes
  • Connection timeout management
  • Health check monitoring

Query Optimization

  • Automatic index suggestions
  • Query plan analysis
  • Performance recommendations
  • Slow query detection

Use Cases

📈 Business Intelligence

Generate business insights from your data:

yaml
tools:
  - name: "business-intelligence"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "bi-db"
      database: "warehouse"
      username: "analyst"
      password: "${BI_PASSWORD}"
      queries:
        - "SELECT category, SUM(amount) as revenue FROM sales WHERE date >= '2024-01-01' GROUP BY category ORDER BY revenue DESC"
        - "SELECT product_id, name, COUNT(*) as sales_count FROM sales JOIN products ON sales.product_id = products.id GROUP BY product_id, name ORDER BY sales_count DESC LIMIT 20"

🔍 Data Quality Analysis

Check data quality and integrity:

yaml
tools:
  - name: "data-quality-analysis"
    tool: "databaseClient"
    args:
      databaseType: "mysql"
      serverName: "db-server"
      database: "production"
      username: "analyst"
      password: "${DB_PASSWORD}"
      queries:
        - "SELECT COUNT(*) as total_users, COUNT(email) as users_with_email FROM users"
        - "SELECT 'duplicates' as issue, COUNT(*) as count FROM users GROUP BY email HAVING COUNT(*) > 1"
        - "SELECT 'missing_orders' as issue, COUNT(*) as count FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE o.id IS NULL"

📊 Performance Monitoring

Monitor database performance:

yaml
tools:
  - name: "performance-monitoring"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "prod-db"
      database: "postgres"
      username: "monitor"
      password: "${MONITOR_PASSWORD}"
      queries:
        - "SELECT datname, numbackends, xact_commit, xact_rollback, blks_read, blks_hit FROM pg_stat_database WHERE datname NOT IN ('template0', 'template1')"
        - "SELECT query, calls, total_time, mean_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10"

🔧 Database Maintenance

Perform database maintenance tasks:

yaml
tools:
  - name: "database-maintenance"
    tool: "databaseClient"
    args:
      databaseType: "postgresql"
      serverName: "prod-db"
      database: "app_production"
      username: "dba"
      password: "${DBA_PASSWORD}"
      queries:
        - "VACUUM ANALYZE users"
        - "REINDEX TABLE users"
        - "SELECT schemaname, tablename, n_tup_ins, n_tup_upd, n_tup_del FROM pg_stat_user_tables"

Best Practices

  1. Use Connection Pooling: Enable connection reuse for better performance
  2. Set Row Limits: Prevent large result sets from overwhelming the system
  3. Use Dry Run: Validate queries before execution in production
  4. Monitor Performance: Regularly check query performance and optimization
  5. Secure Credentials: Use connection strings with proper security
  6. Batch Queries: Group related queries together
  7. Choose Appropriate Formats: Use CSV/JSON for data export, tables for analysis