163 lines
5.6 KiB
Go
163 lines
5.6 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type GolangDbDriver struct {
|
|
dbName string
|
|
pkgLink string
|
|
testSuite string
|
|
}
|
|
|
|
var DbDriverList = []GolangDbDriver {
|
|
GolangDbDriver {
|
|
dbName: "Apache Ignite/GridGain",
|
|
pkgLink: "https://github.com/amsokol/ignite-go-client",
|
|
testSuite: "Unknown",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "Amazon AWS Athena",
|
|
pkgLink: "https://github.com/uber/athenadriver",
|
|
testSuite: "Unknown",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "Google Cloud Spanner",
|
|
pkgLink: "https://github.com/rakyll/go-sql-driver-spanner",
|
|
testSuite: "Unknown",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "MS SQL Server (pure go)",
|
|
pkgLink: "https://github.com/denisenkom/go-mssqldb",
|
|
testSuite: "Unknown",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "MySQL",
|
|
pkgLink: "https://github.com/go-sql-driver/mysql/",
|
|
testSuite: "pass the compatibility test suite at https://github.com/bradfitz/go-sql-test",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "MySQL",
|
|
pkgLink: "https://github.com/siddontang/go-mysql/",
|
|
testSuite: "pass the compatibility test suite but are not currently included in it",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "Oracle (uses cgo)",
|
|
pkgLink: "https://github.com/mattn/go-oci8",
|
|
testSuite: "Unknown",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "Postgres (pure Go)",
|
|
pkgLink: "https://github.com/lib/pq",
|
|
testSuite: "pass the compatibility test suite at https://github.com/bradfitz/go-sql-test",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "Postgres (uses cgo)",
|
|
pkgLink: "https://github.com/jbarham/gopgsqldriver",
|
|
testSuite: "Unknown",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "Snowflake (pure Go)",
|
|
pkgLink: "https://github.com/snowflakedb/gosnowflake",
|
|
testSuite: "Unknown",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "SQLite (uses cgo)",
|
|
pkgLink: "https://github.com/mattn/go-sqlite3",
|
|
testSuite: "pass the compatibility test suite at https://github.com/bradfitz/go-sql-test",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "SQLite (uses cgo)",
|
|
pkgLink: "https://github.com/gwenn/gosqlite",
|
|
testSuite: "Unknown",
|
|
},
|
|
GolangDbDriver {
|
|
dbName: "Apache Hive",
|
|
pkgLink: "https://github.com/sql-machine-learning/gohive",
|
|
testSuite: "Unknown",
|
|
},
|
|
}
|
|
|
|
func main() {
|
|
previousTime := time.Now()
|
|
fmt.Printf("Starting the Golang SQLite demo: at %s\n", previousTime.Format("2006-01-02T15:04:05.999999999Z07:00"))
|
|
|
|
dbSourceName := "golang_sql_driver.db"
|
|
os.Remove(dbSourceName)
|
|
|
|
dbDriverName := "sqlite3"
|
|
db, err := sql.Open(dbDriverName, dbSourceName)
|
|
if err != nil {
|
|
fmt.Println("Failed to open the database:", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
if err = db.Ping(); err != nil {
|
|
fmt.Println("Failed to establish a connection to the database:", err)
|
|
}
|
|
|
|
tx, err := db.Begin()
|
|
if err != nil {
|
|
fmt.Println("Failed to start a database transaction:", err)
|
|
}
|
|
|
|
sqlStatement := `
|
|
create table if not exists SqlDrivers (dbName varchar(255), pkgLink varchar(255), testSuite varchar(255));
|
|
delete from SqlDrivers;
|
|
`
|
|
_, err = db.Exec(sqlStatement)
|
|
if err != nil {
|
|
fmt.Println("Failed to create table:", sqlStatement, err)
|
|
return
|
|
}
|
|
|
|
statement, err := tx.Prepare("insert into SqlDrivers(dbName, pkgLink, testSuite) values(?, ?, ?)")
|
|
if err != nil {
|
|
fmt.Println("Failed to prepare SQL statements:", err)
|
|
}
|
|
defer statement.Close()
|
|
for _, entry := range DbDriverList {
|
|
_, err = statement.Exec(entry.dbName, entry.pkgLink, entry.testSuite)
|
|
if err != nil {
|
|
fmt.Println("Failed to prepare SQL statements:", err)
|
|
}
|
|
}
|
|
|
|
tx.Commit()
|
|
|
|
rows, err := db.Query("select dbName, pkgLink, testSuite from SqlDrivers")
|
|
if err != nil {
|
|
fmt.Println("Failed to query the database:", err)
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
var dbName sql.NullString
|
|
var pkgLink sql.NullString
|
|
var testSuite sql.NullString
|
|
err = rows.Scan(&dbName, &pkgLink, &testSuite)
|
|
if err != nil {
|
|
fmt.Println("Failed to Scan the query results:", err)
|
|
}
|
|
fmt.Printf("dbName=%v;\n pkgLink=%v;\n testSuite=%v\n", dbName.String, pkgLink.String, testSuite.String)
|
|
}
|
|
err = rows.Err()
|
|
if err != nil {
|
|
fmt.Println("Error was encountered during query result iteration:", err)
|
|
}
|
|
|
|
_, err = db.Exec("delete from SqlDrivers")
|
|
if err != nil {
|
|
fmt.Println("Failed to delete all records in the database:", err)
|
|
}
|
|
|
|
currentTime := time.Now()
|
|
fmt.Printf("Total running time: %f Seconds\n", currentTime.Sub(previousTime).Seconds())
|
|
|
|
os.Remove(dbSourceName)
|
|
}
|
|
|