/ConnectionOracle.go

http://go-db-oracle.googlecode.com/ · Go · 63 lines · 33 code · 13 blank · 17 comment · 5 complexity · a73c95f4d5e216bab8f537c4080d3f9e MD5 · raw file

  1. // Copyright 2011 Antonio Diaz Gil. All rights reserved.
  2. package dboracle
  3. /*
  4. #cgo CFLAGS: -I/opt/oracle/include
  5. #cgo LDFLAGS: -lclntsh -L/opt/oracle/lib32
  6. #include <oci.h>
  7. //#include <oratypes.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. extern void AuxOCIErrorGet( OCIError *hError);
  11. extern OraText *Get_OraText( char* str);
  12. */
  13. import "C"
  14. import (
  15. // "os"
  16. "fmt"
  17. "unsafe"
  18. )
  19. type ConnectionOracle struct {
  20. driver *DriverOracle
  21. hServer *C.OCIServer
  22. hSession *C.OCISession
  23. //hError *C.OCIError
  24. }
  25. func (c *ConnectionOracle) NewStatement( sql string) (s *StatementOracle, err int) {
  26. s = new(StatementOracle)
  27. pStatement := unsafe.Pointer(&s.hStatement)
  28. res := C.OCIHandleAlloc( unsafe.Pointer(c.driver.hEnv), (*unsafe.Pointer)(pStatement), C.OCI_HTYPE_STMT, 0, nil);
  29. if (C.OCI_SUCCESS != res /*&& C.OCI_STILL_EXECUTING != res*/) {
  30. fmt.Printf( "Result hSession=%v\n", res)
  31. C.AuxOCIErrorGet( c.driver.hError);
  32. return nil, -1
  33. }
  34. cSql := C.CString( sql)
  35. defer C.free( unsafe.Pointer(cSql))
  36. var osql *C.OraText = C.Get_OraText( cSql)
  37. //fmt.Printf( "%v:%v\n", C.strlen(sql), C.GoString(sql))
  38. res = C.OCIStmtPrepare(s.hStatement, c.driver.hError, osql, C.ub4(C.strlen(cSql)), C.OCI_NTV_SYNTAX, C.OCI_DEFAULT);
  39. if (C.OCI_SUCCESS != res /*&& C.OCI_STILL_EXECUTING != res*/) {
  40. fmt.Printf( "Resultado OCIStmtPrepare=%v\n", res)
  41. C.AuxOCIErrorGet( c.driver.hError);
  42. return nil, -2
  43. }
  44. s.fetchDone = false
  45. s.con = c
  46. return s, 0
  47. }