database

package
v1.3.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 7, 2020 License: MIT Imports: 14 Imported by: 0

README

Intrucciones:

Intalacion de libreria rana/ora

LINUX

Creamos una carpeta nueva y le asignamos permisos:

sudo mkdir /usr/local/share/pkgconfig
sudo chmod 777 /usr/local/share/pkgconfig

Accedemos a la carpeta que hemos creados:

cd /usr/local/share/pkgconfig

Creamos un archivo con el nombre oci8.pc con el siguiente contenido:

prefix=/usr
version=19.3
build=client64

libdir=${prefix}/lib/oracle/${version}/${build}/lib
includedir=${prefix}/include/oracle/${version}/${build}

Name: oci8
Description: Oracle database engine
Version: ${version}
Libs: -L${libdir} -lclntsh
Libs.private:
Cflags: -I${includedir}
Validar que se tiene instalado completamente el Oracle Instant Client en su version 12.1 / 19.3:
oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64
oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64
oracle-instantclient19.3-precomp-19.3.0.0.0-1.x86_64
oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64
oracle-instantclient19.3-tools-19.3.0.0.0-1.x86_64
Validar que se posee las variables de entornos configuradas:
sudo nano ~/.profile

export PKG_CONFIG_PATH=/usr/local/share/pkgconfig
export ORACLE_HOME=/usr/lib/oracle/19.3/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME

export OCI_HOME=/usr/lib/oracle/19.3/client64/lib
export OCI_LIB_DIR=$ORACLE_HOME/lib
export OCI_INC_DIR=/usr/include/oracle/19.3/client64
export OCI_INCLUDE_DIR=/usr/include/oracle/19.3/client64
export OCI_VERSION=12

export PATH=$PATH:$ORACLE_HOME/bin
export GOPATH=/home/gvalladares/Repo/goProyectos

export C_INCLUDE_PATH=/usr/include:/usr/include/oracle/19.3/client64:/usr/local/include
Si se modifico el profile, se debera de recargar las variables de entorno:
source ~/.profile
En el proyecto que requerimo el paquete procederemos a descargarla e instalarla:
go get -u -v gopkg.in/rana/ora.v4
Windows:
Requisitos:
  • Oracle Client 64-bit (Cliente12.1 o superior de preferencia)
  • Instalacion de Go en 64-bit
  • 64-bit MinGW-64 instalado:mingw-w64.
  • Versión de GIT para Windows
Lista de Client Oracle
  • Oracle client.
  • Instant Client Package - Basic
  • Instant Client Package - JDBC Supplement
  • Instant Client Package - SQL*Plus
  • Instant Client Package - SDK
  • Instant Client Package - ODBC
  • Instant Client Package - WRC
Configuración de pkg-config

Crear la carpeta C:\pkg-config y descomprime en su interior los siguientes archivos:

http://ftp.gnome.org/pub/gnome/binaries/win64/dependencies/gettext-runtime_0.18.1.1-2_win64.zip

http://ftp.gnome.org/pub/gnome/binaries/win64/dependencies/pkg-config_0.23-2_win64.zip

http://ftp.gnome.org/pub/gnome/binaries/win64/glib/2.26/glib_2.26.1-1_win64.zip

Crear una carpeta siguiente c:\pkg-config\PKG_CONFIG_PATH y crea un archivo con el nombre oci8.pc en el interior de la carpeta anteriormente creada:

oracle=c:/app/client/user/product/12.1.0/client_1
prefix=/devel/target/XXXXXXXXXXXXXXXXXXXXXXXXXX
exec_prefix=${prefix}
libdir=${oracle}/oci/lib/msvc
includedir=${oracle}/oci/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: oci8
Version: 12.1
Description: oci8 library
Libs: -L${libdir} -loci
Cflags: -I${includedir}
Variables de entorno

Se agrega en la variable de entorno PATH, la ruta del directorio BIN de la instalación MinGW-64 y de la ruta de pkg-config: c:\pkg-config\bin

Se necesita crear una variable de entorno con el nombre de PKG_CONFIG_PATH con el valor siguiente C:\pkg-config\PKG_CONFIG_PATH.

Instalación de la librería para Oracle
go get gopkg.in/rana/ora.v4

go install -v gopkg.in/rana/ora.v4
Codigo de prueba:
package main

import (
        "database/sql"
        _ "gopkg.in/rana/ora.v4"
        "fmt"
)

func main() {
        db, err := sql.Open("ora", "user/pass@servidor/DB")
        if err !=nil {
                fmt.Println("Connection error", err)
        }
        defer db.Close()

        qry := "SELECT user FROM dual"
        fmt.Println("Running query:", qry)
        rows, err := db.Query(qry)

        if err != nil {
                fmt.Println("Error:", err)
        }

        defer rows.Close()
        var user string
        for rows.Next() {
                if err = rows.Scan(&user); err != nil {
                        fmt.Println("Error:", err)
                        break
                }
                fmt.Println(user)
        }
}
Validación del entorno
C:\>systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name:                   Microsoft Windows 10 Pro
OS Version:                10.0.15063 N/A Build 15063

C:\>gcc --version
gcc (x86_64-posix-seh-rev2, Built by MinGW-W64 project) 7.1.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

C:\>go version
go version go1.8.3 windows/amd64

C:\>tnsping
TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 24-AUG-2017 09:13:00
Copyright (c) 1997, 2014, Oracle.  All rights reserved.
TNS-03502: Insufficient arguments.  Usage:  tnsping <address> [<count>]

C:\>git --version
git version 2.14.1.windows.1

Documentation

Index

Constants

View Source
const (

	/*INTP : tipo core entero*/
	INTP TpCore = "integer"
	/*STTP : tipo core texto*/
	STTP TpCore = "string"
	/*FLTP : tipo core numerico*/
	FLTP TpCore = "number"
	/*BLTP : tipo core condicional*/
	BLTP TpCore = "bool"
	/*DTTP : tipo core date*/
	DTTP TpCore = "date"
	/*JSONTP : tipo core json*/
	JSONTP TpCore = "json"

	/*SQLLite : conexion tipo sqllite
	https://github.com/mattn/go-sqlite3
	*/
	SQLLite = "SQLLITE"
	/*Ora : conexion tipo oracle
	https://gopkg.in/rana/ora.v4
	*/
	Ora = "ORA"
	/*Post : conexion tipo postgres
	https://github.com/lib/pq
	*/
	Post = "POST"
	/*Mysql : conexion tipo mysql
	https://github.com/go-sql-driver/mysql
	*/
	Mysql = "MYSQL"
	/*Sqlser : conexion tipo sql server
	https://github.com/denisenkom/go-mssqldb
	*/
	Sqlser = "SQLSER"
	/*PrefixG : prefijo general para los parametros en las consultas ejemplo : :val1 oracle ? post  */
	PrefixG = ":n"
	/*INSERT : prefijo de insert */
	INSERT = "INSERT"
	/*UPDATE : prefijo de UPDATE */
	UPDATE = "UPDATE"
	/*DELETE : prefijo de DELETE */
	DELETE = "DELETE"
	/*SELECT : prefijo de select*/
	SELECT = "SELECT"
	/*FROM : prefijo de tablas */
	FROM = "FROM"
)

Variables

View Source
var (
	/*TESTTABLE : quieries para probar si una tabla existe en la base de datos*/
	TESTTABLE = map[string]string{
		Ora: `
		SELECT CASE WHEN COUNT(*) > 0
			THEN 1 ELSE 0 END REG
		FROM ALL_TABLES
		WHERE  TABLE_NAME = :TABLENAME
		`,
		Post: `
		SELECT CASE WHEN EXISTS (
			SELECT FROM PG_TABLES
			WHERE    TABLENAME  = :TABLENAME
			) THEN 1 ELSE 0 END  REG
		`,
		Mysql: `
		SELECT CASE  WHEN EXISTS(
			SELECT * FROM INFORMATION_SCHEMA.TABLES
			WHERE TABLE_NAME = :TABLENAME
			) > 0 THEN 1 ELSE 0 END REG
		`,
		Sqlser: `
		SELECT CASE  WHEN EXISTS(
			SELECT * FROM INFORMATION_SCHEMA.TABLES
			WHERE TABLE_NAME = :TABLENAME
			) THEN 1 ELSE 0 END REG
		`,
		SQLLite: `
		SELECT CASE  WHEN EXISTS(
			SELECT *
            FROM SQLITE_MASTER
            WHERE TYPE = 'TABLE' AND NAME = :TABLENAME
			) THEN 1 ELSE 0 END REG
		`,
	}
	/*CADCONN : contiene el formato de las cadenas de conexion*/
	CADCONN = map[string]string{
		Ora:     "%s/%s@%s:%d/%s",
		Post:    "postgres://%s:%s@%s:%d/%s?sslmode=%s",
		Mysql:   "%s:%s@tcp(%s:%d)/%s",
		Sqlser:  "server=%s;user id=%s;password=%s;port=%d;database=%s;",
		SQLLite: "%s",
	}
	/*Prefijos : contiene  los diferentes prefijos de distintas base de datos.
	Ejemplo: select * from cliente where nombre=:n sera reemplazada por :val*/
	Prefijos = map[string]string{
		Ora:     ":val",
		Post:    "$",
		Mysql:   "?",
		Sqlser:  ":",
		SQLLite: "?",
	}
	/*PrefijosDB : contiene los string de conexion al momento de ejecutar la funcion open*/
	PrefijosDB = map[string]string{
		Ora:     "ora",
		Post:    "postgres",
		Mysql:   "mysql",
		Sqlser:  "mssql",
		SQLLite: "sqlite3",
	}
	/*FORMATTOSTRCONECT : formato to string para la conexion de base de datos*/
	FORMATTOSTRCONECT = "[%s|%s|%s|%d|%s|%s|%s|%s]"
	/*Ssmodes : hace referencia si tienen conexion ssl
	0* disable - No SSL
	1* require - Always SSL (skip verification)
	2* verify-ca - Always SSL (verify that the certificate presented by the
	  server was signed by a trusted CA)
	3* verify-full - Always SSL (verify that the certification presented by
	  the server was signed by a trusted CA and the server host name
	  matches the one in the certificate)

	*/
	Ssmodes = []string{"disable", "require", "verify-ca", "verify-full"}
)

Functions

func FindTp

func FindTp(v interface{}, tp TpCore) interface{}

FindTp : busca el tipo de datos para las tablas con constante prederminadas INTP : tipo core entero STTP : tipo core texto FLTP : tipo core numerico BLTP : tipo core condicional DTTP : tipo core date

func ScanDataGeneric

func ScanDataGeneric(filas *sqlx.Rows, columnas []string, cantrows int, datachan chan utl.JSON, errchan chan error)

ScanDataGeneric : escanea los datos de ejecutarquerieGO en rutinas

Types

type DataTable

type DataTable struct {
	// contains filtered or unexported fields
}

DataTable : maneja un crud completo y genera script automaticos

func (*DataTable) AddIndex

func (p *DataTable) AddIndex(col string) error

AddIndex : agrega una llave para los delete o update

func (*DataTable) AddIndexs

func (p *DataTable) AddIndexs(cols ...string) error

AddIndexs : agrega varias claves primarias

func (*DataTable) AddRow

func (p *DataTable) AddRow(row StData)

AddRow : Agrega una fila

func (*DataTable) AddRows

func (p *DataTable) AddRows(rows ...StData)

AddRows : Agrega varias fila

func (*DataTable) GenDeletes

func (p *DataTable) GenDeletes() ([]StQuery, error)

GenDeletes : genera los delete masivos para modificaciones de base de datos

func (*DataTable) GenInserts

func (p *DataTable) GenInserts() ([]StQuery, error)

GenInserts : genera insert masivos para modificaciones de base de datos

func (*DataTable) GenSQL

func (p *DataTable) GenSQL(accion string) ([]StQuery, error)

GenSQL : genera acciones de base de datos mediante los siguientes comando INSERT,UPDATE,DELETE

func (*DataTable) GenUpdates

func (p *DataTable) GenUpdates() ([]StQuery, error)

GenUpdates : genera los update masivos para modificaciones de base de datos de ante mano tener que colocar indices

func (*DataTable) GetCols

func (p *DataTable) GetCols() ([]string, error)

GetCols : Obtiene el nombre de las columnas de cada fila

func (*DataTable) GetIndex

func (p *DataTable) GetIndex() []string

GetIndex : Obtiene el nombre de los indices

func (*DataTable) GetRow

func (p *DataTable) GetRow(row int) (StData, error)

GetRow : Obtiene una fila X por el numero de fila

func (*DataTable) GetRows

func (p *DataTable) GetRows() []StData

GetRows : Obtiene todas las fila

func (*DataTable) GetTable

func (p *DataTable) GetTable() string

GetTable : Obtiene el nombre de la tabla

func (*DataTable) LenIndex

func (p *DataTable) LenIndex() int

LenIndex : Obtienen la cantidad de llaves primarias para update o delete

func (*DataTable) LenRows

func (p *DataTable) LenRows() int

LenRows : Obtienen la cantidad de fila

func (*DataTable) SetTable

func (p *DataTable) SetTable(table string)

SetTable : Modifica el nombre de la tabla

func (*DataTable) ValidRow

func (p *DataTable) ValidRow() bool

ValidRow : valida si tiene filas llenadas

type StCadConect

type StCadConect struct {
	File    string `json:"filedb"  ini:"filedb"`
	Usuario string `json:"usuario" ini:"usuario"`
	Clave   string `json:"clave"   ini:"clave"`
	Nombre  string `json:"nombre"  ini:"nombre"`
	Tipo    string `json:"tipo"    ini:"tipo"`
	Host    string `json:"host"    ini:"host"`
	Puerto  int    `json:"puerto"  ini:"puerto"`
	Sslmode string `json:"sslmode" ini:"sslmode"`
}

StCadConect : Estructura para generar la cadena de conexiones de base de datos

func (*StCadConect) ToString

func (p *StCadConect) ToString() string

ToString : Muestra la estructura StCadConect

func (*StCadConect) Trim

func (p *StCadConect) Trim()

Trim : Elimina los espacio en cualquier campo string

func (*StCadConect) ValidCad

func (p *StCadConect) ValidCad() bool

ValidCad : valida la cadena de conexion capturada

type StConect

type StConect struct {
	Conexion StCadConect

	DBGO   *sqlx.DB
	DBTx   *sql.Tx
	DBStmt *sql.Stmt

	Queries map[string]string
	// contains filtered or unexported fields
}

StConect : Estructura que contiene la conexion a x tipo de base de datos.

func (*StConect) Close

func (p *StConect) Close() error

Close : cierra las conexiones de base de datos intanciadas

func (*StConect) Con

func (p *StConect) Con() error

Con : Crear una conexion ala base de datos configurada en la cadena.

func (*StConect) ConfigENV

func (p *StConect) ConfigENV() error

ConfigENV : lee las configuracion de la base de datos mediante variables de entorno Ejemplo: ENV USUARIO = prueba ENV CLAVE = prueba ENV NOMBRE = prueba ENV TIPO = POST ENV PUERTO = 5433 ENV HOST = Localhost ENV SSLMODE = opcional ENV FILEDB = opcional sqllite

func (*StConect) ConfigINI

func (p *StConect) ConfigINI(PathINI string) error

ConfigINI : Lee las configuraciones de conexion mediante un .ini

Ejemplo:

database

usuario = prueba

clave = prueba

nombre = prueba

tipo = POST

puerto = 5433

host = Localhost

sslmode = opcional

filedb = opcional sqllite

func (*StConect) ConfigJSON

func (p *StConect) ConfigJSON(PathJSON string) error

ConfigJSON : Lee las configuraciones de conexion mediante un .json

Ejemplo:

{

"usuario":"prueba",
"clave":"prueba",
"nombre":"prueba",
"tipo":"POST",
"host":"Localhost",
"puerto":3000,
"sslmode":"",
"filedb":""

}

func (*StConect) ConfigURL

func (p *StConect) ConfigURL(url string)

ConfigURL : captura una conexion nativa de drive para base de datos

func (*StConect) Exec

func (p *StConect) Exec(Data []StQuery, indConect bool) error

Exec :Ejecuta una accion de base de datos nativa con rollback

func (*StConect) ExecBackup

func (p *StConect) ExecBackup() error

ExecBackup : ejecuta el querie backup

func (*StConect) ExecDatatable

func (p *StConect) ExecDatatable(data DataTable, acc string, indConect bool) error

ExecDatatable : ejecuta a nivel de base de datos una accione datable esta puede ser INSERT,DELETE,UPDATE

func (*StConect) ExecValid

func (p *StConect) ExecValid(Data []StQuery, tipacc string) error

ExecValid :Ejecuta una accion de base de datos nativa con rollback y validacion de insert e delete o que tipo de accion es

func (*StConect) Insert

func (p *StConect) Insert(Data []StQuery) error

Insert : Inserta a cualquier tabla donde esta conectado devuelve true si fue guardado o false si no guardo nada.

func (*StConect) NamedIn

func (p *StConect) NamedIn(query StQuery) (string, []interface{}, error)

NamedIn : procesa los argumentos y sql para agarrar la clausula IN

func (*StConect) Query

func (p *StConect) Query(query StQuery, cantrow int, indConect bool) ([]StData, error)

Query : Ejecuta un querie en la base de datos y

  devuelve un map dinamico para mostrar los datos donde le limitan la cantida
	de registro que debe de devolver
	indConect = true deja la conexion abierta
  Ejemplo:
  map[COD_CLI:50364481 NIS_RAD:5355046 SEC_NIS:1]

func (*StConect) QueryJSON

func (p *StConect) QueryJSON(query StQuery, cantrow int, indConect, indLimit bool) ([]byte, error)

QueryJSON : Ejecuta un querie en la base de datos y

  devuelve un json dinamico para mostrar los datos donde le limitan la cantida
	de registro que debe de devolver
	indConect = true deja la conexion abierta
	indLimit = true limite de fila si esta en false desactiva esta opcion

func (*StConect) QueryMap

func (p *StConect) QueryMap(query StQuery, cantrow int, indConect, indLimit bool) ([]StData, error)

QueryMap : Ejecuta un querie en la base de datos y

  devuelve un map dinamico para mostrar los datos donde le limitan la cantida
	de registro que debe de devolver
	indConect = true deja la conexion abierta
	indLimit = true limite de fila si esta en false desactiva esta opcion

func (*StConect) QueryRows

func (p *StConect) QueryRows(query StQuery, indConect bool) (*sqlx.Rows, error)

QueryRows : Ejecuta un query en la base de datos y

  devuelve un puntero de *Rows de sqlx
	indConect = true deja la conexion abierta

func (*StConect) QueryStruct

func (p *StConect) QueryStruct(datadest interface{}, query StQuery, indConect bool) error

QueryStruct : Ejecuta un query en la base de datos y

  captura la data con struct
	EjecutarQueryStruct(&data,sql,true)
	indConect = true deja la conexion abierta

func (*StConect) ResetCnx

func (p *StConect) ResetCnx()

ResetCnx : Limpia la cadena de conexion

func (*StConect) SendSQL

func (p *StConect) SendSQL(code string, args map[string]interface{}) StQuery

SendSQL : envia un sql con los argumentos

func (*StConect) SetBackupScript

func (p *StConect) SetBackupScript(sql string)

SetBackupScript : setea un scrip backup para la creacion de base de datos en modelos go

func (*StConect) Test

func (p *StConect) Test() bool

Test : Valida si se puede conectar ala base de datos antes de un uso.

func (*StConect) UpdateOrDelete

func (p *StConect) UpdateOrDelete(Data []StQuery) (int64, error)

UpdateOrDelete : actualiza e elimina a cualquier tabla donde esta conectado devuelve la cantidad de filas afectadas.

func (*StConect) ValidTable

func (p *StConect) ValidTable(table string) bool

ValidTable : valida si la tabla a buscar existe

type StData

type StData map[string]interface{}

StData : Estructura que extrae los datos de una consulta de base de datos tramformandola en map

func NewStData

func NewStData(mp map[string]interface{}) StData

NewStData : crea un Stdata de un map

func (*StData) Filter

func (p *StData) Filter(keys ...string) StData

Filter : Excluye key de un map interface

func (*StData) KeyColum

func (p *StData) KeyColum() []string

KeyColum : envia las columnas que contiene la data

func (*StData) ToBool

func (p *StData) ToBool(columna string) bool

ToBool : Convierte el valor del map interface{} a bool.

func (*StData) ToInt

func (p *StData) ToInt(columna string) (int, error)

ToInt : Convierte el valor del map interface{} a int.

func (*StData) ToInt64

func (p *StData) ToInt64(columna string) (int64, error)

ToInt64 : Convierte el valor del map interface{} a int64.

func (*StData) ToJSON

func (p *StData) ToJSON() ([]byte, error)

ToJSON : Convierte la estructura StData en JSON para envios externos a rest api.

func (*StData) ToString

func (p *StData) ToString(columna string) (string, error)

ToString : Convierte el valor del map interface{} a string.

func (*StData) UpperKey

func (p *StData) UpperKey() StData

UpperKey : coloca en mayusculas todas las keys

func (*StData) ValidColum

func (p *StData) ValidColum(col string) bool

ValidColum : valida si un campo existe

type StQuery

type StQuery struct {
	Querie string `json:"querie"`
	Args   map[string]interface{}
}

StQuery : Estructura para ejecutar query de base de datos.

type StSQLData

type StSQLData struct {
	Data []byte `db:"data"`
}

StSQLData : Estructura para manipulacion de columnas JSON esto funciona para capturar una sola respuesta a nivel de solucion

ejemplo
select getdata() as data --> donde data deve ser un json o []byte

func (*StSQLData) ToJSON

func (p *StSQLData) ToJSON() utl.JSON

ToJSON : Convierte un StSQLData a utl.JSON

func (*StSQLData) ToMap

func (p *StSQLData) ToMap() ([]map[string]interface{}, error)

ToMap : Convierte un StSQLData a map interface

func (*StSQLData) Unmarshal

func (p *StSQLData) Unmarshal(v interface{}) error

Unmarshal : captura una structura

type TpCore

type TpCore string

TpCore : Enums de tipos de datos para los sql e validacion

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL