GithubHelp home page GithubHelp logo

libpq-wrapper's Introduction

libpq-wrapper

wrapper de base en c++ une class

travail avec gcc-8 c++11... c++17

fait avec XUBUNTU / DEBIAN / MANJARO

il est basé sur libpq C API

ce projet à pour but de simplifier l'accès au travers de libpq mise à disposition par PostGreSql.

projet 2018-03-18 (C) 2018 Copyright 2018 [email protected]

je voudrais remercier...

THANK YOU MERCI BEAUCOUP

le site quebecois https://h-deb.clg.qc.ca/ pour son travaille de divulgation
exemple: https://h-deb.clg.qc.ca/Sujets/Divers--cplusplus/templates_variadiques.html

https://stackoverflow.com une mine d'or pour comprendre avec des examples

https://docs.postgresql.fr/ pour tous les efforts pour la traduction

le site Français wikiversity https://fr.wikiversity.org/wiki/Langage_C%2B%2B
le site cppreference http://en.cppreference.com/w/
http://fr.cppreference.com/w/
le site cplusplus http://www.cplusplus.com/reference/

le site beaver https://dbeaver.com/ pour sa simplicité

le site pgadmin4 https://www.pgadmin.org/ pour tous ses efforts de migrations

et tout ceux qui part leur publication sur des sujets pointus mon permis d'avancé.

ce projet avec ZONED sont intimement lier et conjointement permettent d'approcher un langage de type 4G

Le sujet qui sera développer après la validation du wrapper

Le wrapper se base libpq de PostGreSql

une class libpqwrp.a library pq (libpq) wrp (wrapper)
ou une class libpqwrp.hpp
pour contenir les éléments qui permettent de rendre flexible l'ensemble du process.

pour avoir plusieurs connexions par exemple
une pour les lock update
une pour les read
cela permet de rendre les commits independants etc.....

de faire des pointeurs et de profiter de ses avantages pour le nettoyage de mémoire.

le contrôle du clear de PGresult
la possibilité de faire du istream ou ostream
la récupération du nom avec traitement switch
un type template de variadique pour les requêtes
un autre type stringstream pour les résultats de requête
possibilté d'avoir plusieurs cursor
de traiter les double et int

traitement lock enregistrement select for update avec serialisation

traitement des erreurs...

je souhaite avoir été clair.

il y a plusieurs approches et de façon de traiter les données

il est certainement possible d'aller beaucoup plus loin,
soit dans les traitements d'erreurs .....sachez que sous pgsql ECPG on peut aller beaucoup plus loin
ou insérer des particularitées en relation avec le metier....
mais d'après moi cela serait autre chose qu'un wrapper

ps j'ai laissé en commentaire une ligne pour connaitre les codes retour d'intérroguation ....

N'oubliez pas d'ouvrir un role pour la lecture seulement (read only) par exemple :

CREATE ROLE Read_Only_User WITH LOGIN PASSWORD 'read'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';

GRANT CONNECT ON DATABASE "CGIFCH" TO Read_Only_User;
GRANT USAGE ON SCHEMA public TO Read_Only_User;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO Read_Only_User;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO Read_Only_User;

Utiliser la Lib libpqwrp.a ex: Tiostream ou #include <libpqwrp.hpp> ex:Tclasse (Encours d'élaboration)

slc.begin();
requete = slc.prepare( \
"SELECT " \
"cl.column_name,cl.ORDINAL_POSITION,cl.DATA_TYPE,cl.CHARACTER_MAXIMUM_LENGTH,cl.NUMERIC_PRECISION,cl.NUMERIC_SCALE " \
",(select pg_catalog.col_description(oid,cl.ordinal_position::int) from pg_catalog.pg_class c where c.relname=cl.table_name) as column_comment " \
"FROM information_schema.columns cl " \
"WHERE cl.table_catalog='?'  and cl.table_name='?' " \
"  order by 2 ; " ,(char*) gtk_entry_get_text(eDATABASE) ,(char*) gtk_label_get_text(eTABLE) );

slc.begin();
slc.opensql(requete, cursorName); 	 
if ( !slc.errorSQL ) do
{
	if ( ! slc.fetchEOF )
	{
		

		sqlx = slc.result();

		sqlx>>column_name>>column_ordre>>column_type>>column_length>>column_precision>>column_scale>>column_comment;		
		std::cout<<column_name<<"  "<<column_ordre<<"  "<<column_type<<" :"<<column_length<<":  "<<column_precision<<","<<column_scale<<" >>>> "<<column_comment<<std::endl;

		slc.fetchsql(cursorName);
	}
}while  ( !slc.fetchEOF ) ;	

slc.end();


or

slc.begin();
slc.fetchAll(requete, cursorName);
printMsg("Generator_Field"); 
for (int row = 0; row < slc.countrow() && slc.fetchEOF ==false ; row++)
{
	for (int nf = 0;nf < slc.countfield(); nf++)
		{ 

			switch (HashStringToInt(slc.cfield(nf)))
			{
				case HashStringToInt(NAMEOF(column_name)):			column_name			=	slc.fetch( row, nf);	break; //exemple avec le Nom de la Variable
				case HashStringToInt("ordinal_position"):			column_ordre		=	slc.fetchInt( row, nf);	break;
				case HashStringToInt("data_type"):					column_type			=	slc.fetch( row, nf);	break;
				case HashStringToInt("character_maximum_length"):	column_length		=	slc.fetchInt( row, nf);	break;
				case HashStringToInt("numeric_precision"):			column_precision	=	slc.fetchInt( row, nf);	break;
				case HashStringToInt("numeric_scale"):				column_scale		=	slc.fetchInt( row, nf);	break;
				case HashStringToInt(NAMEOF(column_comment)):		column_comment		=	slc.fetch( row, nf);	break;
			}
		}
		std::cout<<column_name<<"  "<<column_ordre<<"  "<<column_type<<" :"<<column_length<<":  "<<column_precision<<","<<column_scale<<" >>>> "<<column_comment<<std::endl;
}

un exemple de génération de source pour des requêtes

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.