// vtest build: started_mysqld? import db.mysql fn test_prep() { $if !network ? { eprintln('> Skipping test ${@FN}, since `-d network` is not passed.') eprintln('> This test requires a working mysql server running on localhost.') return } config := mysql.Config{ host: '127.0.0.1' port: 3306 username: 'root' password: '12345678' dbname: 'mysql' } db := mysql.connect(config)! mut response := db.exec('drop table if exists test')! assert response == []mysql.Row{} response = db.exec('create table if not exists test ( id INT PRIMARY KEY AUTO_INCREMENT, value TEXT)')! assert response == []mysql.Row{} stmt := db.prepare('insert into test (value) values (?)')! defer { stmt.close() } names := ['jackson', 'hello', 'Disney', 'Marz', 'Bailey', 'Claxton'] for name in names { response = stmt.execute([name])! assert response == []mysql.Row{} } response = db.exec_param_many('select * from test', [''])! assert response == [ mysql.Row{ vals: ['1', 'jackson'] }, mysql.Row{ vals: ['2', 'hello'] }, mysql.Row{ vals: ['3', 'Disney'] }, mysql.Row{ vals: ['4', 'Marz'] }, mysql.Row{ vals: ['5', 'Bailey'] }, mysql.Row{ vals: ['6', 'Claxton'] }, ] } fn test_stmt_bind_result_buffer_without_bind_res() { $if !network ? { eprintln('> Skipping test ${@FN}, since `-d network` is not passed.') eprintln('> This test requires a working mysql server running on localhost.') return } config := mysql.Config{ host: '127.0.0.1' port: 3306 username: 'root' password: '12345678' dbname: 'mysql' } mut db := mysql.connect(config)! defer { db.close() or {} } db.exec('drop table if exists stmt_result_buffer_test')! db.exec('create table if not exists stmt_result_buffer_test ( id INT PRIMARY KEY AUTO_INCREMENT, value TEXT)')! db.exec_param('insert into stmt_result_buffer_test (value) values (?)', 'hello')! mut stmt := db.init_stmt('select value from stmt_result_buffer_test where id = ?') defer { stmt.close() or {} } stmt.prepare()! id := 1 stmt.bind_int(&id) stmt.bind_params()! stmt.execute()! stmt.bind_result_buffer()! stmt.store_result()! first_fetch := stmt.fetch_stmt()! assert first_fetch != 100 second_fetch := stmt.fetch_stmt()! assert second_fetch == 100 } fn test_stmt_prepare_returns_mysql_error_code() { $if !network ? { eprintln('> Skipping test ${@FN}, since `-d network` is not passed.') eprintln('> This test requires a working mysql server running on localhost.') return } config := mysql.Config{ host: '127.0.0.1' port: 3306 username: 'root' password: '12345678' dbname: 'mysql' } mut db := mysql.connect(config)! defer { db.close() or {} } mut stmt := db.init_stmt('insert into missing_stmt_errno_test (value) values (?)') defer { stmt.close() or {} } stmt.prepare() or { assert err.code() == 1146 return } assert false } fn test_prepare_execute_returns_mysql_error_code() { $if !network ? { eprintln('> Skipping test ${@FN}, since `-d network` is not passed.') eprintln('> This test requires a working mysql server running on localhost.') return } config := mysql.Config{ host: '127.0.0.1' port: 3306 username: 'root' password: '12345678' dbname: 'mysql' } mut db := mysql.connect(config)! defer { db.close() or {} } db.exec('drop table if exists stmt_handle_errno_test')! db.exec('create table if not exists stmt_handle_errno_test ( id INT PRIMARY KEY AUTO_INCREMENT, value VARCHAR(255) NOT NULL UNIQUE )')! db.exec_param('insert into stmt_handle_errno_test (value) values (?)', 'duplicate')! stmt := db.prepare('insert into stmt_handle_errno_test (value) values (?)')! defer { stmt.close() } stmt.execute(['duplicate']) or { assert err.code() == 1062 return } assert false }