Esempio n. 1
0
func insertClob(t *testing.T, conn *sql.Tx, text string) bool {
	qry := "INSERT INTO " + tbl + ` (F_int, F_clob) 
                  VALUES (-2, EMPTY_CLOB())`

	if _, err := conn.Exec(qry); err != nil {
		t.Errorf("cannot insert into "+tbl+" (%q): %v", qry, err)
		return false
	}
	var clob *oracle.ExternalLobVar
	qry = "SELECT F_clob FROM " + tbl + " WHERE F_int = -2 AND ROWNUM < 2"
	if err := conn.QueryRow(qry).Scan(&clob); err != nil {
		t.Errorf("cannot select empty clob: %v", err)
		return false
	}
	t.Logf("clob=%v", clob)

	if n, err := clob.WriteAt([]byte(text), 0); err != nil {
		t.Errorf("WriteAt clob: %v", err)
	} else if n != len([]rune(text)) {
		t.Errorf("written %d chars, awaited %d", n, len([]rune(text)))
	} else {
		t.Logf("written %d chars", n)
	}
	clob.Close()

	if err := conn.QueryRow(qry).Scan(&clob); err != nil {
		t.Errorf("cannot select clob: %v", err)
		return false
	}
	t.Logf("clob=%v", clob)
	defer clob.Close()

	got, err := clob.ReadAll()
	if err != nil {
		t.Errorf("reading clob: %v", err)
		return false
	}
	if string(got) != text {
		t.Errorf("got %q, awaited %q", got, text)
		return false
	}
	return true
}