File indexing completed on 2024-04-28 16:30:28
0001 /*************************************************************************** 0002 * SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr 0003 * SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 ***************************************************************************/ 0006 #ifndef SKGDEFINE_H 0007 #define SKGDEFINE_H 0008 /** @file 0009 * This file defines some macros. 0010 * 0011 * @author Stephane MANKOWSKI / Guillaume DE BURE 0012 */ 0013 #include <qstring.h> 0014 #include <qstringbuilder.h> 0015 0016 #include <klocalizedstring.h> 0017 0018 #include "skgbasemodeler_export.h" 0019 0020 #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) 0021 #define SKGENDL endl 0022 #define SKGFLUSH flush 0023 #else 0024 #define SKGENDL Qt::endl 0025 #define SKGFLUSH Qt::flush 0026 #endif 0027 0028 /** 0029 * @var OBJECTSEPARATOR 0030 * Define the separator between object and subobject 0031 */ 0032 #define OBJECTSEPARATOR QStringLiteral(" > ") 0033 0034 /** 0035 * @var DUMPSQLITE 0036 * To display SQLLITE internals (tables, views, indexes, …) 0037 * @see dump 0038 */ 0039 #define DUMPSQLITE (2 << 0) 0040 0041 /** 0042 * @var DUMPPARAMETERS 0043 * To display parameters 0044 * @see dump 0045 */ 0046 #define DUMPPARAMETERS (2 << 1) 0047 0048 /** 0049 * @var DUMPTRANSACTIONS 0050 * To display transactions 0051 * @see dump 0052 */ 0053 #define DUMPTRANSACTIONS (2 << 2) 0054 0055 /** 0056 * @var DUMPNODES 0057 * To display nodes 0058 * @see dump 0059 */ 0060 #define DUMPNODES (2 << 3) 0061 0062 /** 0063 * @var DUMPALL 0064 * To display display all=@p DUMPSQLITE +@p DUMPPARAMETERS +@p DUMPTRANSACTIONS 0065 * @see dump 0066 */ 0067 0068 #define DUMPALL ((2 << 10) - 1) 0069 0070 /** 0071 * @var SKG_UNDO_MAX_DEPTH 0072 * Default value for the max depth for the undo / redo mechanism 0073 */ 0074 #define SKG_UNDO_MAX_DEPTH 50 0075 0076 /** 0077 * @var ERR_NOTIMPL 0078 * Error number 0079 */ 0080 #define ERR_NOTIMPL 1 0081 0082 /** 0083 * @var ERR_NOINTERFACE 0084 * Error number 0085 */ 0086 #define ERR_NOINTERFACE 2 0087 0088 /** 0089 * @var ERR_POINTER 0090 * Error number 0091 */ 0092 #define ERR_POINTER 3 0093 0094 /** 0095 * @var ERR_ABORT 0096 * Error number 0097 */ 0098 #define ERR_ABORT 4 0099 0100 /** 0101 * @var ERR_FAIL 0102 * Error number 0103 */ 0104 #define ERR_FAIL 5 0105 0106 /** 0107 * @var ERR_HANDLE 0108 * Error number 0109 */ 0110 #define ERR_HANDLE 6 0111 0112 /** 0113 * @var ERR_OUTOFMEMORY 0114 * Error number 0115 */ 0116 #define ERR_OUTOFMEMORY 7 0117 0118 /** 0119 * @var ERR_INVALIDARG 0120 * Error number 0121 */ 0122 #define ERR_INVALIDARG 8 0123 0124 /** 0125 * @var ERR_UNEXPECTED 0126 * Error number 0127 */ 0128 #define ERR_UNEXPECTED 9 0129 0130 /** 0131 * @var ERR_WRITEACCESS 0132 * Error number 0133 */ 0134 #define ERR_WRITEACCESS 10 0135 0136 /** 0137 * @var ERR_FORCEABLE 0138 * Error number 0139 */ 0140 #define ERR_FORCEABLE 11 0141 0142 /** 0143 * @var ERR_ENCRYPTION 0144 * Error number 0145 */ 0146 #define ERR_ENCRYPTION 12 0147 0148 /** 0149 * @var ERR_INSTALL 0150 * Error number 0151 */ 0152 #define ERR_INSTALL 13 0153 0154 /** 0155 * @var ERR_CORRUPTION 0156 * Error number 0157 */ 0158 #define ERR_CORRUPTION 14 0159 0160 /** 0161 * @var ERR_READACCESS 0162 * Error number 0163 */ 0164 #define ERR_READACCESS 15 0165 0166 /** 0167 * @brief For a not modified field 0168 **/ 0169 #define NOUPDATE QStringLiteral("-------") 0170 0171 /** 0172 * @var EPSILON 0173 * Epsilon (for comparison) 0174 */ 0175 #define EPSILON 0.00001 0176 0177 /** 0178 * @def DELETECASCADE 0179 * Define a standard trigger for cascaded delete 0180 */ 0181 #define DELETECASCADE(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD)\ 0182 (QStringList() << QString()%"DROP TRIGGER IF EXISTS fkdc_"%(TABLEPARENT)%"_"%(TABLECHILD)%"_"%(ATTPARENT)%"_"%(ATTCHILD) \ 0183 << QString()%"CREATE TRIGGER fkdc_"%(TABLEPARENT)%"_"%(TABLECHILD)%"_"%(ATTPARENT)%"_"%(ATTCHILD)%" "\ 0184 "BEFORE DELETE ON "%(TABLEPARENT)%" "\ 0185 "FOR EACH ROW BEGIN "\ 0186 " DELETE FROM "%(TABLECHILD)%" WHERE "%(TABLECHILD)%"."%(ATTCHILD)%" = OLD."%(ATTPARENT)%"; "\ 0187 "END") 0188 0189 /** 0190 * @def INSERTUPDATECONSTRAINT 0191 * Define a standard trigger for foreign constraint 0192 */ 0193 0194 0195 // Should these strings be translated ??? They look far too SQLish for that purpose 0196 #define INSERTUPDATECONSTRAINT(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD)\ 0197 (QStringList() << QString()%"DROP TRIGGER IF EXISTS fki_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT) \ 0198 << QString()%"CREATE TRIGGER fki_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT)%" "\ 0199 "BEFORE INSERT ON "%(TABLECHILD)%" "\ 0200 "FOR EACH ROW BEGIN "\ 0201 " SELECT RAISE(ABORT, '"%SKGServices::stringToSqlString(i18nc("Error message", "Impossible to insert object (%1 is used by %2).\nConstraint name: %3",TABLEPARENT, TABLECHILD, "fki_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT)))%"') "\ 0202 " WHERE NEW."%(ATTCHILD)%"!=0 AND NEW."%(ATTCHILD)%"!='' AND (SELECT "%(ATTPARENT)%" FROM "%(TABLEPARENT)%" WHERE "%(ATTPARENT)%" = NEW."%(ATTCHILD)%") IS NULL; "\ 0203 "END"\ 0204 << QString()%"DROP TRIGGER IF EXISTS fku_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT) \ 0205 << QString()%"CREATE TRIGGER fku_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT)%" "\ 0206 "BEFORE UPDATE ON "%(TABLECHILD)%" "\ 0207 "FOR EACH ROW BEGIN "\ 0208 " SELECT RAISE(ABORT, '"%SKGServices::stringToSqlString(i18nc("Error message", "Impossible to update object (%1 is used by %2).\nConstraint name: %3",TABLEPARENT, TABLECHILD, "fku_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT)))%"') "\ 0209 " WHERE NEW."%(ATTCHILD)%"!=0 AND NEW."%(ATTCHILD)%"!='' AND (SELECT "%(ATTPARENT)%" FROM "%(TABLEPARENT)%" WHERE "%(ATTPARENT)%" = NEW."%(ATTCHILD)%") IS NULL; "\ 0210 "END") 0211 0212 /** 0213 * @def FOREIGNCONSTRAINT 0214 * Define a standard trigger for foreign constraint 0215 */ 0216 #define FOREIGNCONSTRAINT(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD)\ 0217 (INSERTUPDATECONSTRAINT(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD)\ 0218 << QString()%"DROP TRIGGER IF EXISTS fkd_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT) \ 0219 << QString()%"CREATE TRIGGER fkd_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT)%" "\ 0220 "BEFORE DELETE ON "%(TABLEPARENT)%" "\ 0221 "FOR EACH ROW BEGIN "\ 0222 " SELECT RAISE(ABORT, '"%SKGServices::stringToSqlString(i18nc("Error message", "Impossible to delete used object (%1 is used by %2).\nConstraint name: %3",TABLEPARENT, TABLECHILD, "fkd_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT)))%"') "\ 0223 " WHERE (SELECT "%(ATTCHILD)%" FROM "%(TABLECHILD)%" WHERE "%(ATTCHILD)%" = OLD."%(ATTPARENT)%") IS NOT NULL; "\ 0224 "END") 0225 0226 /** 0227 * @def FOREIGNCONSTRAINTUPDATE 0228 * Define a standard trigger for foreign constraint 0229 */ 0230 #define FOREIGNCONSTRAINTUPDATE(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD)\ 0231 (INSERTUPDATECONSTRAINT(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD)\ 0232 << QString()%"DROP TRIGGER IF EXISTS fkd_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT) \ 0233 << QString()%"CREATE TRIGGER fkd_"%(TABLECHILD)%"_"%(TABLEPARENT)%"_"%(ATTCHILD)%"_"%(ATTPARENT)%" "\ 0234 "BEFORE DELETE ON "%(TABLEPARENT)%" "\ 0235 "FOR EACH ROW BEGIN "\ 0236 " UPDATE "%(TABLECHILD)%" SET "%(ATTCHILD)%"=0 WHERE "%(ATTCHILD)%"=OLD."%(ATTPARENT)%"; "\ 0237 "END") 0238 0239 /** 0240 * @def FOREIGNCONSTRAINTCASCADE 0241 * Define a standard trigger for foreign constraint cascade delete 0242 */ 0243 #define FOREIGNCONSTRAINTCASCADE(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD)\ 0244 INSERTUPDATECONSTRAINT(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD)\ 0245 << DELETECASCADE(TABLEPARENT,ATTPARENT,TABLECHILD,ATTCHILD) 0246 0247 /** 0248 * @def DELETECASCADEPARAMETER 0249 * Define a cascaded delete to delete parameters associated with an object 0250 */ 0251 #define DELETECASCADEPARAMETER(TABLE) \ 0252 (QStringList() << QString()%"DROP TRIGGER IF EXISTS fkdc_"%(TABLE)%"_parameters_uuid" \ 0253 << QString()%"CREATE TRIGGER fkdc_"%(TABLE)%"_parameters_uuid "\ 0254 "BEFORE DELETE ON "%(TABLE)%" "\ 0255 "FOR EACH ROW BEGIN "\ 0256 " DELETE FROM parameters WHERE parameters.t_uuid_parent=OLD.id||'-'||'"%(TABLE)%"'; "\ 0257 "END") 0258 0259 #endif