@trithanka/sql-builder
Version:
A lightweight, function-based, chainable SQL query builder for Node.js using MySQL pool connections.
86 lines (76 loc) • 3.24 kB
JavaScript
const { createSelectBuilder } = require('../src');
console.log('=== BUG TESTING ===\n');
// Bug 1: WHERE clause detection fails with comments/strings
console.log('Bug 1: WHERE detection in comments/strings');
const builder1 = createSelectBuilder("SELECT * FROM users -- WHERE clause here");
const result1 = builder1.where('status = ?', 'active').build();
console.log('SQL:', result1.sql);
console.log('Expected: SELECT * FROM users -- WHERE clause here WHERE status = ?');
console.log('Got:', result1.sql);
console.log('');
// Bug 2: Value validation inconsistency
console.log('Bug 2: Value validation inconsistency');
const builder2 = createSelectBuilder('SELECT * FROM users');
builder2.where('status = ?', ''); // Empty string - should be ignored
builder2.having('COUNT(*) > ?', ''); // Empty string - should be ignored
const result2 = builder2.build();
console.log('Values array:', result2.values);
console.log('Expected: [] (empty array)');
console.log('Got:', result2.values);
console.log('');
// Bug 3: SQL injection vulnerability
console.log('Bug 3: SQL injection vulnerability');
const builder3 = createSelectBuilder('SELECT * FROM users');
builder3.orderBy('id; DROP TABLE users; --', 'ASC');
const result3 = builder3.build();
console.log('SQL:', result3.sql);
console.log('Vulnerable to SQL injection!');
console.log('');
// Bug 4: Pagination with negative values
console.log('Bug 4: Pagination with negative values');
const builder4 = createSelectBuilder('SELECT * FROM users');
builder4.paginate(-5, -10);
const result4 = builder4.build();
console.log('Values:', result4.values);
console.log('SQL:', result4.sql);
console.log('Negative values should be handled!');
console.log('');
// Bug 5: Count mode with complex pagination
console.log('Bug 5: Count mode pagination bug');
const builder5 = createSelectBuilder('SELECT * FROM users');
builder5.where('status = ?', 'active');
builder5.paginate(10, 20);
const result5 = builder5.build('count');
console.log('Main values:', result5.values);
console.log('Count values:', result5.countValues);
console.log('Count SQL:', result5.countSql);
console.log('');
// Bug 6: Multiple ORDER BY calls
console.log('Bug 6: Multiple ORDER BY calls');
const builder6 = createSelectBuilder('SELECT * FROM users');
builder6.orderBy('name', 'ASC');
builder6.orderBy('age', 'DESC'); // Should override previous
const result6 = builder6.build();
console.log('SQL:', result6.sql);
console.log('Expected: ORDER BY age DESC');
console.log('Got:', result6.sql);
console.log('');
// Bug 7: Empty base SQL
console.log('Bug 7: Empty base SQL');
try {
const builder7 = createSelectBuilder('');
const result7 = builder7.build();
console.log('Empty SQL result:', result7.sql);
} catch (error) {
console.log('Error with empty SQL:', error.message);
}
console.log('');
// Bug 8: WHERE clause with special characters
console.log('Bug 8: WHERE clause with special characters');
const builder8 = createSelectBuilder('SELECT * FROM users WHERE name LIKE "%WHERE%"');
builder8.where('status = ?', 'active');
const result8 = builder8.build();
console.log('SQL:', result8.sql);
console.log('Should handle WHERE in string literals correctly');
console.log('');
console.log('=== END BUG TESTING ===');