blob: 62e322d6eb3e94be5bef1a8612da6637306ca670 [file]
/**
* TableSessionPool Example
*
* This example demonstrates how to use TableSessionPool for table model
* operations in IoTDB, including explicit session management.
*/
import { TableSessionPool, PoolConfigBuilder } from '../src';
async function main() {
console.log('=== TableSessionPool Example ===\n');
// Method 1: Traditional constructor (backward compatible)
console.log('Creating table session pool using traditional constructor...');
const pool1 = new TableSessionPool('localhost', 6667, {
username: 'root',
password: 'root',
database: 'my_database', // Set default database
maxPoolSize: 10,
minPoolSize: 2,
});
// Method 2: Using Builder pattern (recommended)
console.log('Creating table session pool using Builder pattern...');
const pool2 = new TableSessionPool(
new PoolConfigBuilder()
.host('localhost')
.port(6667)
.username('root')
.password('root')
.database('my_database')
.maxPoolSize(10)
.minPoolSize(2)
.build()
);
// For demo purposes, we'll use pool1
const pool = pool1;
try {
// Initialize the pool
console.log('\nInitializing table session pool...');
await pool.init();
console.log('Table pool initialized with', pool.getPoolSize(), 'connections');
// Create database if not exists
console.log('\nSetting up database...');
await pool.executeNonQueryStatement('CREATE DATABASE IF NOT EXISTS root.table_example');
// Approach 1: Using pool methods directly (automatic session management)
console.log('\n--- Approach 1: Automatic session management ---');
console.log('Executing table queries...');
const result = await pool.executeQueryStatement('SHOW DATABASES');
console.log('Databases found:', result.rows.length);
// Insert data
console.log('Inserting data...');
await pool.insertTablet({
deviceId: 'root.table_example.table1',
measurements: ['column1', 'column2'],
dataTypes: [1, 3], // INT32, FLOAT
timestamps: [Date.now()],
values: [[100, 25.5]],
});
console.log('Data inserted');
// Approach 2: Explicit session management
console.log('\n--- Approach 2: Explicit session management ---');
console.log('Getting a session from the pool...');
const session = await pool.getSession();
try {
console.log('Executing operations with explicit session...');
// Query with explicit session
const queryResult = await session.executeQueryStatement('SHOW DATABASES');
console.log('Query result:', queryResult.rows.length, 'rows');
// Insert with explicit session
await session.insertTablet({
deviceId: 'root.table_example.table1',
measurements: ['column1', 'column2'],
dataTypes: [1, 3], // INT32, FLOAT
timestamps: [Date.now() + 1000],
values: [[200, 30.5]],
});
console.log('Data inserted via explicit session');
} finally {
// Always release the session back to the pool
pool.releaseSession(session);
console.log('Session released back to the pool');
}
// Pool statistics
console.log('\nTable pool statistics:');
console.log('Total connections:', pool.getPoolSize());
console.log('Available connections:', pool.getAvailableSize());
console.log('In-use connections:', pool.getInUseSize());
} catch (error) {
console.error('Error:', error);
} finally {
console.log('\nClosing table session pool...');
await pool.close();
console.log('Table pool closed');
}
}
main().catch(console.error);