package main

import (
	"context"
	"database/sql"
	"database/sql/driver"
	"errors"
	"fmt"
)

// driverDemo adalah driver tiruan: tidak pernah benar-benar
// tersambung ke database mana pun.
type driverDemo struct{}

// Open dipanggil database/sql saat koneksi pertama dibutuhkan.
func (driverDemo) Open(dsn string) (driver.Conn, error) {
	return nil, errors.New("driver demo tidak mendukung koneksi nyata")
}

func main() {
	fmt.Println("driver terdaftar awal:", sql.Drivers())

	sql.Register("demo", driverDemo{})
	fmt.Println("driver terdaftar kini:", sql.Drivers())

	db, err := sql.Open("demo", "host=localhost dbname=toko")
	fmt.Println("err dari sql.Open   :", err)
	fmt.Println("db bernilai nil?    :", db == nil)

	err = db.PingContext(context.Background())
	fmt.Println("err dari PingContext:", err)
}
