{"id":16985850,"url":"https://github.com/as400jplpc/libpq-wrapper","last_synced_at":"2026-04-16T04:33:05.780Z","repository":{"id":174038231,"uuid":"128008077","full_name":"AS400JPLPC/libpq-wrapper","owner":"AS400JPLPC","description":"wrapper de base en c++","archived":false,"fork":false,"pushed_at":"2019-04-28T00:07:38.000Z","size":2180,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-22T01:42:02.451Z","etag":null,"topics":["c-plus-plus","libpq","postgresql","wrapper"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AS400JPLPC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-04T04:44:43.000Z","updated_at":"2020-08-25T08:47:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"df76003c-b700-42db-8392-3f4d20b43861","html_url":"https://github.com/AS400JPLPC/libpq-wrapper","commit_stats":null,"previous_names":["as400jplpc/libpq-wrapper"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AS400JPLPC/libpq-wrapper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Flibpq-wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Flibpq-wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Flibpq-wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Flibpq-wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AS400JPLPC","download_url":"https://codeload.github.com/AS400JPLPC/libpq-wrapper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Flibpq-wrapper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31871653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","libpq","postgresql","wrapper"],"created_at":"2024-10-14T02:44:17.902Z","updated_at":"2026-04-16T04:33:05.760Z","avatar_url":"https://github.com/AS400JPLPC.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# libpq-wrapper\nwrapper de base en c++ une class\u003cbr\u003e \n\ntravail avec gcc-8 c++11... c++17  \u003cbr\u003e\n\nfait avec XUBUNTU / DEBIAN / MANJARO \n\nil est basé sur libpq C API\u003cbr\u003e\n\nce projet à pour but de simplifier l'accès au travers de libpq mise à disposition par PostGreSql.\u003cbr\u003e\n\n\nprojet 2018-03-18  (C) 2018   Copyright 2018 \u003claroche.jeanpierre@gmail.com\u003e\u003cbr\u003e\n\nje voudrais remercier...\u003cbr\u003e\n\nTHANK YOU   MERCI BEAUCOUP\u003cbr\u003e\n\n\n le site quebecois \t\t\t\t\thttps://h-deb.clg.qc.ca/\t\tpour son travaille de divulgation\u003cbr\u003e\n exemple:\t\t\t\t\t\t\thttps://h-deb.clg.qc.ca/Sujets/Divers--cplusplus/templates_variadiques.html\u003cbr\u003e\n\n https://stackoverflow.com\t\t\tune mine d'or pour comprendre avec des examples\u003cbr\u003e\n\n https://docs.postgresql.fr/\t\tpour tous les efforts pour la traduction\u003cbr\u003e\n\n \n le site Français wikiversity\t\thttps://fr.wikiversity.org/wiki/Langage_C%2B%2B\u003cbr\u003e\n le site cppreference\t\t\t\thttp://en.cppreference.com/w/\u003cbr\u003e\n\t\t\t\t\t\t\t\t\thttp://fr.cppreference.com/w/\u003cbr\u003e\n le site cplusplus\t\t\t\t\thttp://www.cplusplus.com/reference/\u003cbr\u003e\n\n le site beaver\t\t\t\t\t\thttps://dbeaver.com/\t\t\tpour sa simplicité\u003cbr\u003e\n\n le site pgadmin4\t\t\t\t\thttps://www.pgadmin.org/\t\tpour tous ses efforts de migrations\u003cbr\u003e  \n\n et tout ceux qui part leur publication sur des sujets pointus mon permis d'avancé.\u003cbr\u003e\n\n ce projet avec ZONED sont intimement lier et conjointement permettent d'approcher un langage de type 4G\u003cbr\u003e\n\n Le sujet qui sera développer après la validation du wrapper\u003cbr\u003e\n\n\n Le wrapper se base libpq de PostGreSql\u003cbr\u003e\n\n une class libpqwrp.a\t           library pq (libpq)  wrp (wrapper)\u003cbr\u003e\n ou une class libpqwrp.hpp\u003cbr\u003e\n pour contenir les éléments qui permettent de rendre flexible l'ensemble du process.\u003cbr\u003e\n\n\n pour avoir plusieurs connexions par exemple\u003cbr\u003e\n une pour les lock update\u003cbr\u003e\n une pour les read\u003cbr\u003e\n cela permet de rendre les commits independants etc.....\u003cbr\u003e\n\n de faire des pointeurs et de profiter de ses avantages pour le nettoyage de mémoire.\u003cbr\u003e\n\n le contrôle du clear de PGresult\u003cbr\u003e\n la possibilité de faire du istream ou ostream\u003cbr\u003e\n la récupération du nom avec traitement switch\u003cbr\u003e\n un type template de variadique pour les requêtes\u003cbr\u003e\n un autre type stringstream pour les résultats de requête\u003cbr\u003e\n possibilté d'avoir plusieurs cursor\u003cbr\u003e\n de traiter les double et int\u003cbr\u003e\n\n traitement lock enregistrement   select for update avec serialisation \u003cbr\u003e\n\n traitement des erreurs...\n\n je souhaite avoir été clair.\u003cbr\u003e\n\n il y a plusieurs approches et de façon de traiter les données\u003cbr\u003e\n \n\n il est certainement possible d'aller beaucoup plus loin,\u003cbr\u003e\n soit dans les traitements d'erreurs .....sachez que sous pgsql ECPG on peut aller beaucoup plus loin \u003cbr\u003e\n ou insérer des particularitées en relation avec le metier....\u003cbr\u003e \n mais d'après moi cela serait autre chose qu'un wrapper\u003cbr\u003e\n\n ps j'ai laissé en commentaire une ligne pour connaitre les codes retour d'intérroguation .... \u003cbr\u003e \n \n \n N'oubliez pas d'ouvrir un role pour la lecture seulement (read only)  par exemple : \u003cbr\u003e\n \n CREATE ROLE Read_Only_User WITH LOGIN PASSWORD 'read' \u003cbr\u003e\nNOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity'; \u003cbr\u003e\n\nGRANT CONNECT ON DATABASE \"CGIFCH\" TO Read_Only_User; \u003cbr\u003e\nGRANT USAGE ON SCHEMA public TO Read_Only_User; \u003cbr\u003e\nGRANT SELECT ON ALL TABLES IN SCHEMA public TO Read_Only_User; \u003cbr\u003e\nGRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO Read_Only_User;\n\u003cbr\u003e\n\n\nUtiliser la Lib libpqwrp.a ex: Tiostream ou  #include \u003clibpqwrp.hpp\u003e   ex:Tclasse (Encours d'élaboration)\n\n\tslc.begin();\n\trequete = slc.prepare( \\\n\t\"SELECT \" \\\n\t\"cl.column_name,cl.ORDINAL_POSITION,cl.DATA_TYPE,cl.CHARACTER_MAXIMUM_LENGTH,cl.NUMERIC_PRECISION,cl.NUMERIC_SCALE \" \\\n\t\",(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 \" \\\n\t\"FROM information_schema.columns cl \" \\\n\t\"WHERE cl.table_catalog='?'  and cl.table_name='?' \" \\\n\t\"  order by 2 ; \" ,(char*) gtk_entry_get_text(eDATABASE) ,(char*) gtk_label_get_text(eTABLE) );\n\n\tslc.begin();\n\tslc.opensql(requete, cursorName); \t \n\tif ( !slc.errorSQL ) do\n\t{\n\t\tif ( ! slc.fetchEOF )\n\t\t{\n\t\t\t\n\n\t\t\tsqlx = slc.result();\n\n\t\t\tsqlx\u003e\u003ecolumn_name\u003e\u003ecolumn_ordre\u003e\u003ecolumn_type\u003e\u003ecolumn_length\u003e\u003ecolumn_precision\u003e\u003ecolumn_scale\u003e\u003ecolumn_comment;\t\t\n\t\t\tstd::cout\u003c\u003ccolumn_name\u003c\u003c\"  \"\u003c\u003ccolumn_ordre\u003c\u003c\"  \"\u003c\u003ccolumn_type\u003c\u003c\" :\"\u003c\u003ccolumn_length\u003c\u003c\":  \"\u003c\u003ccolumn_precision\u003c\u003c\",\"\u003c\u003ccolumn_scale\u003c\u003c\" \u003e\u003e\u003e\u003e \"\u003c\u003ccolumn_comment\u003c\u003cstd::endl;\n\n\t\t\tslc.fetchsql(cursorName);\n\t\t}\n \t}while  ( !slc.fetchEOF ) ;\t\n\n\tslc.end();\n\n\n\tor\n\n\tslc.begin();\n\tslc.fetchAll(requete, cursorName);\n\tprintMsg(\"Generator_Field\"); \n    for (int row = 0; row \u003c slc.countrow() \u0026\u0026 slc.fetchEOF ==false ; row++)\n    {\n\t\tfor (int nf = 0;nf \u003c slc.countfield(); nf++)\n\t\t\t{ \n\n\t\t\t\tswitch (HashStringToInt(slc.cfield(nf)))\n\t\t\t\t{\n\t\t\t\t\tcase HashStringToInt(NAMEOF(column_name)):\t\t\tcolumn_name\t\t\t=\tslc.fetch( row, nf);\tbreak; //exemple avec le Nom de la Variable\n\t\t\t\t\tcase HashStringToInt(\"ordinal_position\"):\t\t\tcolumn_ordre\t\t=\tslc.fetchInt( row, nf);\tbreak;\n\t\t\t\t\tcase HashStringToInt(\"data_type\"):\t\t\t\t\tcolumn_type\t\t\t=\tslc.fetch( row, nf);\tbreak;\n\t\t\t\t\tcase HashStringToInt(\"character_maximum_length\"):\tcolumn_length\t\t=\tslc.fetchInt( row, nf);\tbreak;\n\t\t\t\t\tcase HashStringToInt(\"numeric_precision\"):\t\t\tcolumn_precision\t=\tslc.fetchInt( row, nf);\tbreak;\n\t\t\t\t\tcase HashStringToInt(\"numeric_scale\"):\t\t\t\tcolumn_scale\t\t=\tslc.fetchInt( row, nf);\tbreak;\n\t\t\t\t\tcase HashStringToInt(NAMEOF(column_comment)):\t\tcolumn_comment\t\t=\tslc.fetch( row, nf);\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstd::cout\u003c\u003ccolumn_name\u003c\u003c\"  \"\u003c\u003ccolumn_ordre\u003c\u003c\"  \"\u003c\u003ccolumn_type\u003c\u003c\" :\"\u003c\u003ccolumn_length\u003c\u003c\":  \"\u003c\u003ccolumn_precision\u003c\u003c\",\"\u003c\u003ccolumn_scale\u003c\u003c\" \u003e\u003e\u003e\u003e \"\u003c\u003ccolumn_comment\u003c\u003cstd::endl;\n\t}\n\n\u003cbr\u003e\nun exemple de génération de source pour des requêtes\n\u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fas400jplpc%2Flibpq-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fas400jplpc%2Flibpq-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fas400jplpc%2Flibpq-wrapper/lists"}