diff --git a/samples/tutorials/go/columnstore.go b/samples/tutorials/go/columnstore.go index a9994798e9..5b65fcf822 100644 --- a/samples/tutorials/go/columnstore.go +++ b/samples/tutorials/go/columnstore.go @@ -1,46 +1,51 @@ -package main - -import _ "github.com/denisenkom/go-mssqldb" -import "database/sql" -import "log" -import "fmt" -import "time" - -var server = "localhost" -var port = 1433 -var user = "sa" -var password = "your_password" -var database = "SampleDB" - -// Delete an employee from database -func ExecuteAggregateStatement(db *sql.DB) { - result, err := db.Prepare("SELECT SUM(Price) as sum FROM Table_with_5M_rows") - if err != nil { - fmt.Println("Error preparing query: " + err.Error()) - } - - row := result.QueryRow() - var sum string - err = row.Scan(&sum) - fmt.Printf("Sum: %s\n", sum) -} - -func main() { - // Connect to database - connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;", - server, user, password, port, database) - conn, err := sql.Open("mssql", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - fmt.Printf("Connected!\n") - defer conn.Close() - - t1 := time.Now() - fmt.Printf("Start time: %s\n", t1) - - ExecuteAggregateStatement(conn) - - t2 := time.Since(t1) - fmt.Printf("The query took: %s\n", t2) -} \ No newline at end of file +package main + +import ( + "database/sql" + "fmt" + "log" + "time" + + _ "github.com/denisenkom/go-mssqldb" +) + +var ( + server = "localhost" + port = 1433 + user = "sa" + password = "your_password" + database = "SampleDB" +) + +// ExecuteAggregateStatement output summary of prices +func ExecuteAggregateStatement(db *sql.DB) { + result, err := db.Prepare("SELECT SUM(Price) as sum FROM Table_with_5M_rows") + if err != nil { + fmt.Println("Error preparing query: " + err.Error()) + } + + row := result.QueryRow() + var sum string + err = row.Scan(&sum) + fmt.Printf("Sum: %s\n", sum) +} + +func main() { + // Connect to database + connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;", + server, user, password, port, database) + conn, err := sql.Open("mssql", connString) + if err != nil { + log.Fatal("Open connection failed:", err.Error()) + } + fmt.Printf("Connected!\n") + defer conn.Close() + + t1 := time.Now() + fmt.Printf("Start time: %s\n", t1) + + ExecuteAggregateStatement(conn) + + t2 := time.Since(t1) + fmt.Printf("The query took: %s\n", t2) +} diff --git a/samples/tutorials/go/connect.go b/samples/tutorials/go/connect.go index da320b1a1a..bcea682c3b 100644 --- a/samples/tutorials/go/connect.go +++ b/samples/tutorials/go/connect.go @@ -1,33 +1,37 @@ -package main - -import _ "github.com/denisenkom/go-mssqldb" -import "database/sql" -import "log" -import "fmt" - - -var server = "localhost" -var port = 1433 -var user = "sa" -var password = "your_password" - -func main() { - connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d", - server, user, password, port) - - conn, err := sql.Open("mssql", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - fmt.Printf("Connected!\n") - defer conn.Close() - stmt, err := conn.Prepare("select @@version") - row := stmt.QueryRow() - var result string - - err = row.Scan(&result) - if err != nil { - log.Fatal("Scan failed:", err.Error()) - } - fmt.Printf("%s\n", result) -} \ No newline at end of file +package main + +import ( + "database/sql" + "fmt" + "log" + + _ "github.com/denisenkom/go-mssqldb" +) + +var ( + server = "localhost" + port = 1433 + user = "sa" + password = "your_password" +) + +func main() { + connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d", + server, user, password, port) + + conn, err := sql.Open("mssql", connString) + if err != nil { + log.Fatal("Open connection failed:", err.Error()) + } + fmt.Printf("Connected!\n") + defer conn.Close() + stmt, err := conn.Prepare("select @@version") + row := stmt.QueryRow() + var result string + + err = row.Scan(&result) + if err != nil { + log.Fatal("Scan failed:", err.Error()) + } + fmt.Printf("%s\n", result) +} diff --git a/samples/tutorials/go/crud.go b/samples/tutorials/go/crud.go index efb18c9c9f..4b292d10c6 100644 --- a/samples/tutorials/go/crud.go +++ b/samples/tutorials/go/crud.go @@ -1,99 +1,116 @@ -package main - -import _ "github.com/denisenkom/go-mssqldb" -import "database/sql" -import "log" -import "fmt" - -var server = "localhost" -var port = 1433 -var user = "sa" -var password = "your_password" -var database = "SampleDB" - -// Create an employee -func CreateEmployee(db *sql.DB, name string, location string) (int64, error) { - tsql := fmt.Sprintf("INSERT INTO TestSchema.Employees (Name, Location) VALUES ('%s','%s');", - name, location) - result, err := db.Exec(tsql) - if err != nil { - fmt.Println("Error inserting new row: " + err.Error()) - return -1, err - } - return result.LastInsertId() -} - -// Read all employees -func ReadEmployees(db *sql.DB) (int, error) { - tsql := fmt.Sprintf("SELECT Id, Name, Location FROM TestSchema.Employees;") - rows, err := db.Query(tsql) - if err != nil { - fmt.Println("Error reading rows: " + err.Error()) - return -1, err - } - defer rows.Close() - var count int = 0 - for rows.Next(){ - var name, location string - var id int - err := rows.Scan(&id, &name, &location) - if err != nil { - fmt.Println("Error reading rows: " + err.Error()) - return -1, err - } - fmt.Printf("ID: %d, Name: %s, Location: %s\n", id, name, location) - count++ - } - return count, nil -} - -// Update an employee's information -func UpdateEmployee(db *sql.DB, name string, location string) (int64, error) { - tsql := fmt.Sprintf("UPDATE TestSchema.Employees SET Location = '%s' WHERE Name= '%s'", - location, name) - result, err := db.Exec(tsql) - if err != nil { - fmt.Println("Error updating row: " + err.Error()) - return -1, err - } - return result.LastInsertId() -} - -// Delete an employee from database -func DeleteEmployee(db *sql.DB, name string) (int64, error) { - tsql := fmt.Sprintf("DELETE FROM TestSchema.Employees WHERE Name='%s';", name) - result, err := db.Exec(tsql) - if err != nil { - fmt.Println("Error deleting row: " + err.Error()) - return -1, err - } - return result.RowsAffected() -} - -func main() { - // Connect to database - connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;", - server, user, password, port, database) - conn, err := sql.Open("mssql", connString) - if err != nil { - log.Fatal("Open connection failed:", err.Error()) - } - fmt.Printf("Connected!\n") - defer conn.Close() - - // Create employee - createId, err := CreateEmployee(conn, "Jake", "United States") - fmt.Printf("Inserted ID: %d successfully.\n", createId) - - // Read employees - count, err := ReadEmployees(conn) - fmt.Printf("Read %d rows successfully.\n", count) - - // Update from database - updateId, err := UpdateEmployee(conn, "Jake", "Poland") - fmt.Printf("Updated row with ID: %d successfully.\n", updateId) - - // Delete from database - rows, err := DeleteEmployee(conn, "Jake") - fmt.Printf("Deleted %d rows successfully.\n", rows) -} \ No newline at end of file +package main + +import ( + "database/sql" + "fmt" + "log" + + _ "github.com/denisenkom/go-mssqldb" +) + +var ( + server = "localhost" + port = 1433 + user = "sa" + password = "your_password" + database = "SampleDB" +) + +// CreateEmployee create an employee +func CreateEmployee(db *sql.DB, name string, location string) (int64, error) { + tsql := fmt.Sprintf("INSERT INTO TestSchema.Employees (Name, Location) VALUES ('%s','%s');", + name, location) + result, err := db.Exec(tsql) + if err != nil { + fmt.Println("Error inserting new row: " + err.Error()) + return -1, err + } + return result.LastInsertId() +} + +// ReadEmployees read all employees +func ReadEmployees(db *sql.DB) (int, error) { + tsql := fmt.Sprintf("SELECT Id, Name, Location FROM TestSchema.Employees;") + rows, err := db.Query(tsql) + if err != nil { + fmt.Println("Error reading rows: " + err.Error()) + return -1, err + } + defer rows.Close() + count := 0 + for rows.Next() { + var name, location string + var id int + err := rows.Scan(&id, &name, &location) + if err != nil { + fmt.Println("Error reading rows: " + err.Error()) + return -1, err + } + fmt.Printf("ID: %d, Name: %s, Location: %s\n", id, name, location) + count++ + } + return count, nil +} + +// UpdateEmployee update an employee's information +func UpdateEmployee(db *sql.DB, name string, location string) (int64, error) { + tsql := fmt.Sprintf("UPDATE TestSchema.Employees SET Location = '%s' WHERE Name= '%s'", + location, name) + result, err := db.Exec(tsql) + if err != nil { + fmt.Println("Error updating row: " + err.Error()) + return -1, err + } + return result.LastInsertId() +} + +// DeleteEmployee delete an employee from database +func DeleteEmployee(db *sql.DB, name string) (int64, error) { + tsql := fmt.Sprintf("DELETE FROM TestSchema.Employees WHERE Name='%s';", name) + result, err := db.Exec(tsql) + if err != nil { + fmt.Println("Error deleting row: " + err.Error()) + return -1, err + } + return result.RowsAffected() +} + +func main() { + // Connect to database + connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;", + server, user, password, port, database) + conn, err := sql.Open("mssql", connString) + if err != nil { + log.Fatal("Open connection failed:", err.Error()) + } + fmt.Printf("Connected!\n") + defer conn.Close() + + // Create employee + createID, err := CreateEmployee(conn, "Jake", "United States") + if err != nil { + log.Fatal("CreateEmployee failed:", err.Error()) + } + fmt.Printf("Inserted ID: %d successfully.\n", createID) + + // Read employees + count, err := ReadEmployees(conn) + if err != nil { + log.Fatal("ReadEmployees failed:", err.Error()) + } + fmt.Printf("Read %d rows successfully.\n", count) + + // Update from database + updateID, err := UpdateEmployee(conn, "Jake", "Poland") + if err != nil { + log.Fatal("UpdateEmployee failed:", err.Error()) + } + fmt.Printf("Updated row with ID: %d successfully.\n", updateID) + + // Delete from database + rows, err := DeleteEmployee(conn, "Jake") + if err != nil { + log.Fatal("DeleteEmployee failed:", err.Error()) + } + fmt.Printf("Deleted %d rows successfully.\n", rows) +} diff --git a/samples/tutorials/go/orm.go b/samples/tutorials/go/orm.go index c68b8ae468..155c784c08 100644 --- a/samples/tutorials/go/orm.go +++ b/samples/tutorials/go/orm.go @@ -1,98 +1,106 @@ -package main - -import ( - "fmt" - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/mssql" -) - -var server = "localhost" -var port = 1433 -var user = "sa" -var password = "your_password" -var database = "SampleDB" - -type User struct { - gorm.Model - FirstName string - LastName string -} - -type Task struct { - gorm.Model - Title string - DueDate string - IsComplete bool - UserID uint -} - -func ReadAllTasks(db *gorm.DB){ - var users []User - var tasks []Task - db.Find(&users) - - for _, user := range users{ - db.Model(&user).Related(&tasks) - fmt.Printf("%s %s's tasks:\n", user.FirstName, user.LastName) - for _, task := range tasks { - fmt.Printf("Title: %s\nDueDate: %s\nIsComplete:%t\n\n", - task.Title, task.DueDate, task.IsComplete) - } - } -} - -func UpdateSomeonesTask(db *gorm.DB, userId int){ - var task Task - db.Where("user_id = ?", userId).First(&task).Update("Title", "Buy donuts for Luis") - fmt.Printf("Title: %s\nDueDate: %s\nIsComplete:%t\n\n", - task.Title, task.DueDate, task.IsComplete) -} - -func DeleteSomeonesTasks(db *gorm.DB, userId int){ - db.Where("user_id = ?", userId).Delete(&Task{}) - fmt.Printf("Deleted all tasks for user %d", userId) -} - -func main() { - connectionString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s", - server, user, password, port, database) - db, err := gorm.Open("mssql", connectionString) - - if err != nil { - panic("failed to connect database") - } - gorm.DefaultCallback.Create().Remove("mssql:set_identity_insert") - defer db.Close() - - fmt.Println("Migrating models...") - db.AutoMigrate(&User{}) - db.AutoMigrate(&Task{}) - - // Create awesome Users - fmt.Println("Creating awesome users...") - db.Create(&User{FirstName: "Andrea", LastName: "Lam"}) //UserID: 1 - db.Create(&User{FirstName: "Meet", LastName: "Bhagdev"}) //UserID: 2 - db.Create(&User{FirstName: "Luis", LastName: "Bosquez"}) //UserID: 3 - - // Create appropriate Tasks for each user - fmt.Println("Creating new appropriate tasks...") - db.Create(&Task{ - Title: "Do laundry", DueDate: "2017-03-30", IsComplete: false, UserID: 1}) - db.Create(&Task{ - Title: "Mow the lawn", DueDate: "2017-03-30", IsComplete: false, UserID: 2}) - db.Create(&Task{ - Title: "Do more laundry", DueDate: "2017-03-30", IsComplete: false, UserID: 3}) - db.Create(&Task{ - Title: "Watch TV", DueDate: "2017-03-30", IsComplete: false, UserID: 3}) - - // Read - fmt.Println("Reading all the tasks...") - ReadAllTasks(db) - - // Update - update Task title to something more appropriate - fmt.Println("Updating Andrea's task...") - UpdateSomeonesTask(db, 1) - - // Delete - delete Luis's task - DeleteSomeonesTasks(db, 3) -} \ No newline at end of file +package main + +import ( + "fmt" + + "github.com/jinzhu/gorm" + _ "github.com/jinzhu/gorm/dialects/mssql" +) + +var ( + server = "localhost" + port = 1433 + user = "sa" + password = "your_password" + database = "SampleDB" +) + +// User represents a user account +type User struct { + gorm.Model + FirstName string + LastName string +} + +// Task represents a task for the user +type Task struct { + gorm.Model + Title string + DueDate string + IsComplete bool + UserID uint +} + +// ReadAllTasks read all tasks +func ReadAllTasks(db *gorm.DB) { + var users []User + var tasks []Task + db.Find(&users) + + for _, user := range users { + db.Model(&user).Related(&tasks) + fmt.Printf("%s %s's tasks:\n", user.FirstName, user.LastName) + for _, task := range tasks { + fmt.Printf("Title: %s\nDueDate: %s\nIsComplete:%t\n\n", + task.Title, task.DueDate, task.IsComplete) + } + } +} + +// UpdateSomeonesTask update someone's task +func UpdateSomeonesTask(db *gorm.DB, userID int) { + var task Task + db.Where("user_id = ?", userID).First(&task).Update("Title", "Buy donuts for Luis") + fmt.Printf("Title: %s\nDueDate: %s\nIsComplete:%t\n\n", + task.Title, task.DueDate, task.IsComplete) +} + +// DeleteSomeonesTasks delete someone's task +func DeleteSomeonesTasks(db *gorm.DB, userID int) { + db.Where("user_id = ?", userID).Delete(&Task{}) + fmt.Printf("Deleted all tasks for user %d", userID) +} + +func main() { + connectionString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s", + server, user, password, port, database) + db, err := gorm.Open("mssql", connectionString) + + if err != nil { + panic("failed to connect database") + } + gorm.DefaultCallback.Create().Remove("mssql:set_identity_insert") + defer db.Close() + + fmt.Println("Migrating models...") + db.AutoMigrate(&User{}) + db.AutoMigrate(&Task{}) + + // Create awesome Users + fmt.Println("Creating awesome users...") + db.Create(&User{FirstName: "Andrea", LastName: "Lam"}) //UserID: 1 + db.Create(&User{FirstName: "Meet", LastName: "Bhagdev"}) //UserID: 2 + db.Create(&User{FirstName: "Luis", LastName: "Bosquez"}) //UserID: 3 + + // Create appropriate Tasks for each user + fmt.Println("Creating new appropriate tasks...") + db.Create(&Task{ + Title: "Do laundry", DueDate: "2017-03-30", IsComplete: false, UserID: 1}) + db.Create(&Task{ + Title: "Mow the lawn", DueDate: "2017-03-30", IsComplete: false, UserID: 2}) + db.Create(&Task{ + Title: "Do more laundry", DueDate: "2017-03-30", IsComplete: false, UserID: 3}) + db.Create(&Task{ + Title: "Watch TV", DueDate: "2017-03-30", IsComplete: false, UserID: 3}) + + // Read + fmt.Println("Reading all the tasks...") + ReadAllTasks(db) + + // Update - update Task title to something more appropriate + fmt.Println("Updating Andrea's task...") + UpdateSomeonesTask(db, 1) + + // Delete - delete Luis's task + DeleteSomeonesTasks(db, 3) +}