Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,115 @@
|
||||
// vtest build: started_mssql?
|
||||
module main
|
||||
|
||||
import db.mssql
|
||||
import os
|
||||
import time
|
||||
|
||||
const default_mssql_conn_str = 'Driver={FreeTDS};Server=127.0.0.1;Port=1433;UID=sa;PWD=Vlang12345678!;Database=master;TDS_Version=7.4;ClientCharset=UTF-8'
|
||||
|
||||
fn test_config_get_conn_str() {
|
||||
assert mssql.Config{
|
||||
driver: 'ODBC Driver 18 for SQL Server'
|
||||
server: 'tcp:localhost'
|
||||
uid: 'sa'
|
||||
pwd: 'secret'
|
||||
dbname: 'master'
|
||||
}.get_conn_str() == 'Driver={ODBC Driver 18 for SQL Server};Server=tcp:localhost;UID=sa;PWD=secret;Database=master'
|
||||
assert mssql.Config{
|
||||
driver: 'FreeTDS'
|
||||
server: '127.0.0.1'
|
||||
port: 1433
|
||||
user: 'sa'
|
||||
password: 'secret'
|
||||
options: {
|
||||
'ClientCharset': 'UTF-8'
|
||||
'TDS_Version': '7.4'
|
||||
}
|
||||
}.get_conn_str() == 'Driver=FreeTDS;Server=127.0.0.1;Port=1433;UID=sa;PWD=secret;ClientCharset=UTF-8;TDS_Version=7.4'
|
||||
assert mssql.Config{
|
||||
dsn: 'Reporting DB'
|
||||
user: 'sa'
|
||||
password: 'secret'
|
||||
dbname: 'master'
|
||||
options: {
|
||||
'Encrypt': 'yes'
|
||||
'TrustServerCertificate': 'yes'
|
||||
}
|
||||
}.get_conn_str() == 'DSN={Reporting DB};UID=sa;PWD=secret;Database=master;Encrypt=yes;TrustServerCertificate=yes'
|
||||
assert mssql.Config{
|
||||
conn_str: 'DSN=Accounting;Trusted_Connection=Yes'
|
||||
driver: 'ignored'
|
||||
}.get_conn_str() == 'DSN=Accounting;Trusted_Connection=Yes'
|
||||
}
|
||||
|
||||
fn test_row_helpers() {
|
||||
row := mssql.Row{
|
||||
vals: ['1', 'alice']
|
||||
}
|
||||
assert row.val(0) == '1'
|
||||
assert row.val(1) == 'alice'
|
||||
assert row.values() == ['1', 'alice']
|
||||
}
|
||||
|
||||
fn test_connection_and_query() {
|
||||
$if !network ? {
|
||||
eprintln('> Skipping test ${@FN}, since `-d network` is not passed.')
|
||||
eprintln('> This test requires a working sql server running on localhost.')
|
||||
return
|
||||
}
|
||||
|
||||
mut conn := connect_with_retry()!
|
||||
defer {
|
||||
conn.close()
|
||||
}
|
||||
|
||||
conn.query("if object_id('vlang_mssql_test', 'U') is not null drop table vlang_mssql_test") or {}
|
||||
defer {
|
||||
conn.query("if object_id('vlang_mssql_test', 'U') is not null drop table vlang_mssql_test") or {}
|
||||
}
|
||||
|
||||
create_result := conn.query('create table vlang_mssql_test (
|
||||
id int identity(1,1) primary key,
|
||||
name varchar(32) not null
|
||||
)')!
|
||||
assert create_result.rows == []mssql.Row{}
|
||||
|
||||
first_insert := conn.query("insert into vlang_mssql_test (name) values ('alice')")!
|
||||
assert first_insert.rows == []mssql.Row{}
|
||||
assert first_insert.num_rows_affected == 1
|
||||
|
||||
second_insert := conn.query("insert into vlang_mssql_test (name) values ('bob')")!
|
||||
assert second_insert.rows == []mssql.Row{}
|
||||
assert second_insert.num_rows_affected == 1
|
||||
|
||||
result := conn.query('select id, name from vlang_mssql_test order by id')!
|
||||
assert result.rows == [
|
||||
mssql.Row{
|
||||
vals: ['1', 'alice']
|
||||
},
|
||||
mssql.Row{
|
||||
vals: ['2', 'bob']
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
fn connect_with_retry() !mssql.Connection {
|
||||
conn_str := os.getenv_opt('VMSSQL_CONN_STR') or { default_mssql_conn_str }
|
||||
mut last_err := 'could not connect to sql server'
|
||||
for _ in 0 .. 30 {
|
||||
mut conn := mssql.Connection{}
|
||||
if _ := conn.connect(conn_str) {
|
||||
// SQL Server can accept a connection before it is ready to execute statements.
|
||||
if _ := conn.query('select 1') {
|
||||
return conn
|
||||
} else {
|
||||
last_err = err.msg()
|
||||
conn.close()
|
||||
}
|
||||
} else {
|
||||
last_err = err.msg()
|
||||
}
|
||||
time.sleep(2 * time.second)
|
||||
}
|
||||
return error(last_err)
|
||||
}
|
||||
Reference in new issue
Block a user