{"id":16985822,"url":"https://github.com/as400jplpc/nim_wrpgsql","last_synced_at":"2026-04-11T22:03:33.739Z","repository":{"id":174038258,"uuid":"247735293","full_name":"AS400JPLPC/nim_wrpgsql","owner":"AS400JPLPC","description":"wrapper postgresql basé sur libpq de nim pour la gestion ","archived":false,"fork":false,"pushed_at":"2020-03-24T10:26:47.000Z","size":645,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-26T19:50:24.283Z","etag":null,"topics":["libpq","nim","nim-lang","sql"],"latest_commit_sha":null,"homepage":null,"language":"Nim","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":"2020-03-16T14:58:24.000Z","updated_at":"2020-03-24T10:26:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"756ba9fb-df98-4270-bf51-d65e09f0428e","html_url":"https://github.com/AS400JPLPC/nim_wrpgsql","commit_stats":null,"previous_names":["as400jplpc/nim_wrpgsql"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_wrpgsql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_wrpgsql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_wrpgsql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_wrpgsql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AS400JPLPC","download_url":"https://codeload.github.com/AS400JPLPC/nim_wrpgsql/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244894309,"owners_count":20527669,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["libpq","nim","nim-lang","sql"],"created_at":"2024-10-14T02:44:14.926Z","updated_at":"2026-04-11T22:03:33.644Z","avatar_url":"https://github.com/AS400JPLPC.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nim_wrpgsql\n\n***wrapper postgresql basé sur libpq de Nim pour la gestion***\n\nBonjour, je me suis appuyé sur les sources déposés dans github **NIM ** orm et divers exemples misent à disposition [https://github.com/search?q=nim+orm](URL)\n\n# ** Les principes généraux de gestion pour l'entreprise.\n**La fonction TRY est mise fortement à l'épreuve**\n\n# ** Tout est en test  mais déjà fonctionnel  \navec une base de donnée mise à disposition [https://www.postgresqltutorial.com/postgresql-sample-database/](URL)  \n\n*\u003cu\u003edans l'exemple j'ai remis d'aplomb les script pour postgresql\u003c/u\u003e*\n\n# **grande compatibilité avec DB2 from OS400**\n\n- **VARIABLE** :\n\n X Actif\n \n 0 *Encours de développement*\n\n - X__ String\n - X__ Zoned fixed String\n - X__ Dcml fixed Numéric\n - X__ Date fixed YYYY-MM-DD\n - X__ Time fixed HH:MM:SS\n - X__ Int\n - X__ Float\n - X__ Bool\n\n - **Différentes façons de faire sont dans les exemples pour récupérer les valeurs des variables**\n - **possibilité de récupérer les informations sur les colonnes**\n\t - name\n\t - table\n\t - type\n\t - nullable\n\t - position\n\t - maximum char\n\t - précision\n\t - scale\n\t - commentaire\n\t \n- **des fonctions traditionnelles**\n\n\tQUERY / PAGE / FIRST / LAST / NEXT / PRIOR / LOCK\n\t\n\tBEGIN / COMMIT / ROLLBACK\n\t\n\tSAVEPOINT / SAVEPOINTROLLBACK  /  SAVEPOINTRELEASE\n\t\n\tConnect\n\t\n\tcloseDb\n\t\n\tclearRslt\n\t\n\tGetDb\n\t\n\tGetUser\n\t\n\tGetPassword\n\t\n\tGetHost\n\t\n\tGetPort\n\t\n\tisTable\n\t\n\tsqlValue\n\t\n\tsqlName\n\t\n\tsqlNumber\n\t\n\tsqlisNul\n\t\n\tsqlLen\n\t\n\tsqlType\n\t\n\tsqlColInfo\n\t\n\tsqlQueryInfo\n\t\n\tfld... from SQL \n\t\n    sql... to SQL\n\nex:\n\n      for r in  0 .. Conn.Rang :\n    \tRcd.vkey.fld(Conn,r, 0)\n    \tRcd.vtext.fld(Conn,r, 1)\n\n\nex:\n\n\u003e     try:\n    \trequete =fmt\"UPDATE tabletype SET vtextx='totsxxxx' WHERE vkey = 10100 ;\"\n    \tDbProd.sqlQuery(ConnProd, requete )\n    except NOTFOUND :\n    \techo  \"NOT FOUND :\" , getCurrentExceptionMsg()\n    except ERRSQL :\n    \techo  \"ERR SQL :\" , getCurrentExceptionMsg()\n\nex:  \n\u003e         proc sql*(a: Date): string =  \n          if a.Data.format(\"yyyy-MM-dd\") == \"0001-01-01\" and a.isBool == true : return \"null\"  \n          else :\n            var d : string = a.Data.format(\"yyyy-MM-dd\")\n          return fmt\"'{d}'\"\n        proc sql*(a: Temps): string =\n          if a.Data.format(\"HH:mm:ss\") == \"00:00:00\" and a.isBool == true : return \"null\"\n          else :\n            var h : string = a.Data.format(\"HH:mm:ss\")\n          return fmt\"'{h}'\"  \n\n\nPS:\n\u003e je vais aussi regarder du coté des blod  \n\n-   la fonction **fmt** de nim est suffisante pour mettre en forme les ordres SQL dynamiquement  \n\n-   les procédures \"sql\" pour les Zoned/Dcml/Date/Temps peuvent être null et très pratique pour formaté les zones dans les requettes SQL.  \n\n  \n\n-   Des exemples simple et fonctionnel   \nj'ai prix une table type et une table basé sur le model OS400 DB2 ou tout est en majuscule DDS  \n\n\u0026nbsp;\n\u0026nbsp;\n\n*\u003cu\u003eexemple mise à jour de la tabletype\u003c/u\u003e*\n\u003e  \n \nvar lock : bool =  true  \n\nwhile lock == true :  \n    \n    try :  \n      DbProd.Begin\n      #requete =fmt\"SELECT * FROM tabletype  WHERE vkey = 101000 ;\" \n      #requete =fmt\"SELECT * FROM tabletype  WHERE vkeyazertyuiop = 101 ;\" \n      requete =fmt\"SELECT * FROM tabletype  WHERE vkey = 101 ;\" \n      DbProd.sqlLock(ConnProd, requete )  \n      ....\n      requete =fmt\"DELETE FROM tabletype   WHERE vkey = 101 ;\" \n      DbProd.sqlQuery(ConnProd, requete )\n      DbProd.Commit\n      DbProd.Begin\n\n      Rcd.vdate:=\"2020-10-20\"\n      # Rcd.vdate:=\"0001-01-01\"\n      requete =fmt\"\"\"INSERT INTO tabletype\n      (vdate, vnumeric, vtext, vonchar, vheure, vkey, vbool, vchar)\n      VALUES({Rcd.vdate.sql()},5000.00, 'JPL', 'C', '11:10:01', 101, true, 'jp-Laroche');\"\"\" \n\n      DbProd.sqlQuery(ConnProd, requete)  \n      \n      # pour le test lock en concurrence \n      echo \"pause : 234\"\n      echo getch()  \n      \n      DbProd.Commit\n      lock = false\n\n    except LOCK :\n      echo \"LOCK :\" , getCurrentExceptionMsg()\n      DbProd.Rollback  \n      Sleep(1000)\n    except NOTFOUND :\n      echo \"NOT FOUND :\" , getCurrentExceptionMsg()\n      DbProd.Rollback\n      lock = false\n    except ERRSQL :\n      echo \"ERR SQL :\" , getCurrentExceptionMsg()\n      DbProd.Rollback\n      echo \"il y a un beug veuillez corriger\"\n      lock = false \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fas400jplpc%2Fnim_wrpgsql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fas400jplpc%2Fnim_wrpgsql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fas400jplpc%2Fnim_wrpgsql/lists"}