Procédure publique · ORM_CSHX2 · Utilitaires SQL

ORM_FormatBoolean

Convertit un booléen WLangage en littéral SQL adapté au provider courant. Évite au code applicatif de connaître les conventions de chaque moteur (les uns acceptent les littéraux TRUE/FALSE, les autres exigent des numériques 1/0).

PUBLIQUE FORMATAGE MySQL · MariaDB · PostgreSQL
01

📋 Description

ORM_FormatBoolean prend un booléen WLangage (Vrai / Faux) et retourne sa représentation textuelle sous la forme attendue par le moteur SQL courant. Le code applicatif n'a donc pas à se soucier de savoir si le provider attend TRUE/FALSE, 1/0, ou un autre format — la procédure choisit automatiquement.

C'est l'équivalent de ORM_Quote mais pour le type booléen : un helper de bas niveau utilisé pour construire des fragments de SQL directement injectables dans une requête.

🎯 Quand utiliser cette procédure

1. Construire une clause WHERE manuellement avec un critère booléen — par exemple « tous les clients actifs », « toutes les commandes archivées ». La procédure produit un littéral SQL valide qu'on concatène directement dans la requête.

2. Insérer ou mettre à jour une valeur booléenne dans une requête SQL composée à la main, en dehors des méthodes ORM standard qui prennent en charge automatiquement le formatage des membres mappés.

3. Garantir la portabilité multi-provider du code applicatif. Le même code WLangage produit des fragments SQL adaptés à MySQL, MariaDB ou PostgreSQL, sans branche conditionnelle dans l'applicatif.

ℹ️ Compatibilité multi-provider

La procédure détecte automatiquement le provider courant et adapte le format de sortie. Le code applicatif reste identique quel que soit le moteur cible.

02

🔑 Signature

Déclaration
PROCÉDURE ORM_FormatBoolean(
  LOCAL bBoolean est un booléen
) : chaîne
ÉlémentValeur
VisibilitéPUBLIQUE

Paramètre

ParamètreTypeRôle
bBooleanbooléenValeur booléenne WLangage à convertir en littéral SQL.

Valeur de retour

Une chaîne contenant le littéral SQL adapté au provider courant — voir §03 pour le détail des valeurs possibles. Le retour ne contient pas de quotes : c'est un littéral booléen ou numérique selon le moteur, prêt à être concaténé directement dans une requête.

03

🧭 Format de sortie selon le provider

La représentation choisie dépend du provider de la connexion ORM courante. Le tableau ci-dessous récapitule les formats produits :

ProviderVraiFauxNote
MySQL10MySQL ne dispose pas de type booléen natif — l'usage est l'entier TINYINT(1).
MariaDB10Comportement aligné sur MySQL.
PostgreSQL (mode natif, défaut)TRUEFALSEPostgreSQL dispose d'un type BOOLEAN natif et accepte les littéraux.
PostgreSQL (mode compatibilité)10Mode optionnel — utile quand les tables PostgreSQL stockent les booléens en numérique pour rester compatibles avec une base MySQL/MariaDB partagée.

Mode compatibilité PostgreSQL

Le mode compatibilité de PostgreSQL (sortie en 1/0 au lieu de TRUE/FALSE) est configurable via une option de ORM_Setup. Il est utile dans les contextes où le schéma PostgreSQL utilise des colonnes numériques pour représenter les booléens — typiquement par compatibilité avec un schéma MySQL/MariaDB historique.

✅ Le retour est un littéral non quoté

La chaîne retournée ne contient jamais de quotes SQL : ni '1', ni 'TRUE'. Concaténée dans une clause WHERE bool_col = X, elle produit la syntaxe correcte sans qu'il soit nécessaire de l'entourer de quotes côté appelant.

04

💡 Exemples

Mode 1 — clause WHERE sur un critère booléen

Cas d'usage : charger tous les clients actifs.

// ── Construire la clause WHERE de manière portable ────────────── clClient:p_sClauseWhere = "clients.ACTIF = " + ORM_FormatBoolean(Vrai) clClient:mth_ChargerSelonClauseWhere() // → MySQL/MariaDB : "clients.ACTIF = 1" // → PostgreSQL natif : "clients.ACTIF = TRUE"

Mode 2 — UPDATE manuel sur un drapeau booléen

Cas d'usage : marquer toutes les commandes du mois précédent comme archivées via une requête SQL directe.

// ── Requête UPDATE construite à la main ───────────────────────── sRequête est une chaîne = ChaîneConstruit(
  "UPDATE commandes SET ARCHIVEE = %1 WHERE MOIS(DATE_CMD) = MOIS(NOW()) - 1",   ORM_FormatBoolean(Vrai) ) // Exécution via l'API SQL standard (hors méthodes ORM) SI SQLExec(sRequête, "REQ_Archive") ALORS Info("Archivage effectué") FIN SQLFerme("REQ_Archive")

Mode 3 — paramètre booléen variable

Cas d'usage : afficher au choix les éléments actifs ou inactifs selon une option IHM.

// ── Lecture d'une option utilisateur ──────────────────────────── bAfficherActifs est un booléen = (COMBO_Filtre = "Actifs") // ── Construction de la clause WHERE ───────────────────────────── clProduit:p_sClauseWhere = "produits.ACTIF = " + ORM_FormatBoolean(bAfficherActifs) clProduit:mth_ChargerSelonClauseWhere() // Le code reste identique quel que soit le provider sous-jacent.