15696Snw141292 /* 25696Snw141292 * CDDL HEADER START 35696Snw141292 * 45696Snw141292 * The contents of this file are subject to the terms of the 55696Snw141292 * Common Development and Distribution License (the "License"). 65696Snw141292 * You may not use this file except in compliance with the License. 75696Snw141292 * 85696Snw141292 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 95696Snw141292 * or http://www.opensolaris.org/os/licensing. 105696Snw141292 * See the License for the specific language governing permissions 115696Snw141292 * and limitations under the License. 125696Snw141292 * 135696Snw141292 * When distributing Covered Code, include this CDDL HEADER in each 145696Snw141292 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 155696Snw141292 * If applicable, add the following below this CDDL HEADER, with the 165696Snw141292 * fields enclosed by brackets "[]" replaced with your own identifying 175696Snw141292 * information: Portions Copyright [yyyy] [name of copyright owner] 185696Snw141292 * 195696Snw141292 * CDDL HEADER END 205696Snw141292 */ 215696Snw141292 /* 22*6386Sjp151216 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 235696Snw141292 * Use is subject to license terms. 245696Snw141292 */ 255696Snw141292 265696Snw141292 #ifndef _SCHEMA_H 275696Snw141292 #define _SCHEMA_H 285696Snw141292 295696Snw141292 #pragma ident "%Z%%M% %I% %E% SMI" 305696Snw141292 315696Snw141292 #ifdef __cplusplus 325696Snw141292 extern "C" { 335696Snw141292 #endif 345696Snw141292 355696Snw141292 /* 365696Snw141292 * Various macros (constant strings) containing: 375696Snw141292 * 385696Snw141292 * - CREATE TABLE/INDEX/TRIGGER/VIEW SQL 395696Snw141292 * - old versions of schema items that have changed 405696Snw141292 * - SQL to detect the version currently installed in a db 415696Snw141292 * - SQL to upgrade the schema from any older version to the current 425696Snw141292 * - the SQL to install the current version of the schema on a 435696Snw141292 * freshly created db is the SQL used to "upgrade" from "version 0" 445696Snw141292 * 455696Snw141292 * There is one set of such macros for the cache DB (CACHE_*) and 465696Snw141292 * another set for the persistent DB (DB_*). The macros ending in _SQL 475696Snw141292 * are used in arguments to init_db_instance(). 485696Snw141292 * 495696Snw141292 * Schema version detection SQL has the following form: 505696Snw141292 * 515696Snw141292 * SELECT CASE (SELECT count(*) FROM sqlite_master) WHEN 0 THEN 0 ELSE 525696Snw141292 * (CASE (SELECT count(*) FROM sqlite_master WHERE sql = <original schema> ...) 535696Snw141292 * WHEN <correct count> THEN 1 ELSE (CASE (<v2 schema>) WHEN ... THEN 2 545696Snw141292 * ELSE -1 END) END AS version; 555696Snw141292 * 565696Snw141292 * That is, check that there is no schema else that the current schema 575696Snw141292 * sql matches the original schema, else the next version, ... and 585696Snw141292 * return an integer identifying the schema. Version numbers returned: 595696Snw141292 * 605696Snw141292 * -1 -> unknown schema (shouldn't happen) 615696Snw141292 * 0 -> no schema (brand new DB, install latest schema) 625696Snw141292 * 1 -> original schema (if != latest, then upgrade) 635696Snw141292 * . -> ... (if != latest, then upgrade) 645696Snw141292 * n -> latest schema (nothing to do) 655696Snw141292 * 665696Snw141292 * Upgrade SQL for the cache DB is simple: drop everything, create 675696Snw141292 * latest schema. This means losing ephemeral mappings, so idmapd must 685696Snw141292 * tell the kernel about that in its registration call. 695696Snw141292 * 705696Snw141292 * Upgrade SQL for the persistent DB is simple: drop the indexes, create 715696Snw141292 * temporary tables with the latest schema, insert into those from the 725696Snw141292 * old tables (transforming the data in the process), then drop the old 735696Snw141292 * tables, create the latest schema, restore the data from the temp. 745696Snw141292 * tables and drop the temp tables. 755696Snw141292 * 765696Snw141292 * Complex, but it avoids all sorts of packaging install/upgrade 775696Snw141292 * complexity, requiring reboots on patch. 785696Snw141292 * 795696Snw141292 * Conventions: 805696Snw141292 * - each TABLE/INDEX gets its own macro, and the SQL therein must not 815696Snw141292 * end in a semi-colon (';) 825696Snw141292 * - macros are named * TABLE_* for tables, INDEX_* for indexes, 835696Snw141292 * *_VERSION_SQL for SQL for determining version number, 845696Snw141292 * *_UPGRADE_FROM_v<version>_SQL for SQL for upgrading from some 855696Snw141292 * schema, *_LATEST_SQL for SQL for installing the latest schema. 865696Snw141292 * - some macros nest expansions of other macros 875696Snw141292 * 885696Snw141292 * The latest schema has two columns for Windows user/group name in 895696Snw141292 * tables where there used to be one. One of those columns contains the 905696Snw141292 * name as it came from the user or from AD, the other is set via a 915696Snw141292 * TRIGGER to be the lower-case version of the first, and we always 925696Snw141292 * search (and index) by the latter. This is for case-insensitivity. 935696Snw141292 */ 945696Snw141292 #define TABLE_IDMAP_CACHE_v1 \ 955696Snw141292 "CREATE TABLE idmap_cache (" \ 965696Snw141292 " sidprefix TEXT," \ 975696Snw141292 " rid INTEGER," \ 985696Snw141292 " windomain TEXT," \ 995696Snw141292 " winname TEXT," \ 1005696Snw141292 " pid INTEGER," \ 1015696Snw141292 " unixname TEXT," \ 1025696Snw141292 " is_user INTEGER," \ 1035696Snw141292 " w2u INTEGER," \ 1045696Snw141292 " u2w INTEGER," \ 1055696Snw141292 " expiration INTEGER" \ 1065696Snw141292 ")" 1075696Snw141292 108*6386Sjp151216 #define TABLE_IDMAP_CACHE_v2 \ 109*6386Sjp151216 "CREATE TABLE idmap_cache " \ 110*6386Sjp151216 "(" \ 111*6386Sjp151216 " sidprefix TEXT," \ 112*6386Sjp151216 " rid INTEGER," \ 113*6386Sjp151216 " windomain TEXT," \ 114*6386Sjp151216 " canon_winname TEXT," \ 115*6386Sjp151216 " winname TEXT," \ 116*6386Sjp151216 " pid INTEGER," \ 117*6386Sjp151216 " unixname TEXT," \ 118*6386Sjp151216 " is_user INTEGER," \ 119*6386Sjp151216 " is_wuser INTEGER," \ 120*6386Sjp151216 " w2u INTEGER," \ 121*6386Sjp151216 " u2w INTEGER," \ 122*6386Sjp151216 " expiration INTEGER" \ 123*6386Sjp151216 ")" 124*6386Sjp151216 1255696Snw141292 #define TABLE_IDMAP_CACHE \ 1265696Snw141292 "CREATE TABLE idmap_cache " \ 1275696Snw141292 "(" \ 1285696Snw141292 " sidprefix TEXT," \ 1295696Snw141292 " rid INTEGER," \ 1305696Snw141292 " windomain TEXT," \ 1315696Snw141292 " canon_winname TEXT," \ 1325696Snw141292 " winname TEXT," \ 1335696Snw141292 " pid INTEGER," \ 1345696Snw141292 " unixname TEXT," \ 1355696Snw141292 " is_user INTEGER," \ 1365696Snw141292 " is_wuser INTEGER," \ 1375696Snw141292 " w2u INTEGER," \ 1385696Snw141292 " u2w INTEGER," \ 139*6386Sjp151216 " map_type INTEGER," \ 140*6386Sjp151216 " map_dn TEXT, "\ 141*6386Sjp151216 " map_attr TEXT, "\ 142*6386Sjp151216 " map_value TEXT, "\ 143*6386Sjp151216 " map_windomain TEXT, "\ 144*6386Sjp151216 " map_winname TEXT, "\ 145*6386Sjp151216 " map_unixname TEXT, "\ 146*6386Sjp151216 " map_is_nt4 INTEGER, "\ 1475696Snw141292 " expiration INTEGER" \ 1485696Snw141292 ")" 1495696Snw141292 1505696Snw141292 #define INDEX_IDMAP_CACHE_SID_W2U_v1 \ 1515696Snw141292 "CREATE UNIQUE INDEX idmap_cache_sid_w2u ON idmap_cache" \ 1525696Snw141292 " (sidprefix, rid, w2u)" 1535696Snw141292 1545696Snw141292 #define INDEX_IDMAP_CACHE_SID_W2U \ 1555696Snw141292 "CREATE UNIQUE INDEX idmap_cache_sid_w2u ON idmap_cache" \ 1565696Snw141292 " (sidprefix, rid, is_user, w2u)" 1575696Snw141292 1585696Snw141292 #define INDEX_IDMAP_CACHE_PID_U2W \ 1595696Snw141292 "CREATE UNIQUE INDEX idmap_cache_pid_u2w ON idmap_cache" \ 1605696Snw141292 " (pid, is_user, u2w)" 1615696Snw141292 1625696Snw141292 #define TRIGGER_IDMAP_CACHE_TOLOWER_INSERT \ 1635696Snw141292 "CREATE TRIGGER idmap_cache_tolower_name_insert " \ 1645696Snw141292 "AFTER INSERT ON idmap_cache " \ 1655696Snw141292 "BEGIN " \ 1665696Snw141292 " UPDATE idmap_cache SET winname = lower_utf8(canon_winname)" \ 1675696Snw141292 " WHERE rowid = new.rowid;" \ 1685696Snw141292 "END" 1695696Snw141292 1705696Snw141292 #define TRIGGER_IDMAP_CACHE_TOLOWER_UPDATE \ 1715696Snw141292 "CREATE TRIGGER idmap_cache_tolower_name_update " \ 1725696Snw141292 "AFTER UPDATE ON idmap_cache " \ 1735696Snw141292 "BEGIN " \ 1745696Snw141292 " UPDATE idmap_cache SET winname = lower_utf8(canon_winname)" \ 1755696Snw141292 " WHERE rowid = new.rowid;" \ 1765696Snw141292 "END" 1775696Snw141292 1785696Snw141292 #define TABLE_NAME_CACHE \ 1795696Snw141292 "CREATE TABLE name_cache (" \ 1805696Snw141292 " sidprefix TEXT," \ 1815696Snw141292 " rid INTEGER," \ 1825696Snw141292 " name TEXT," \ 1835696Snw141292 " canon_name TEXT," \ 1845696Snw141292 " domain TEXT," \ 1855696Snw141292 " type INTEGER," \ 1865696Snw141292 " expiration INTEGER" \ 1875696Snw141292 ")" 1885696Snw141292 1895696Snw141292 #define TABLE_NAME_CACHE_v1 \ 1905696Snw141292 "CREATE TABLE name_cache (" \ 1915696Snw141292 " sidprefix TEXT," \ 1925696Snw141292 " rid INTEGER," \ 1935696Snw141292 " name TEXT," \ 1945696Snw141292 " domain TEXT," \ 1955696Snw141292 " type INTEGER," \ 1965696Snw141292 " expiration INTEGER" \ 1975696Snw141292 ")" 1985696Snw141292 1995696Snw141292 #define TRIGGER_NAME_CACHE_TOLOWER_INSERT \ 2005696Snw141292 "CREATE TRIGGER name_cache_tolower_name_insert " \ 2015696Snw141292 "AFTER INSERT ON name_cache " \ 2025696Snw141292 "BEGIN " \ 2035696Snw141292 " UPDATE name_cache SET name = lower_utf8(canon_name)" \ 2045696Snw141292 " WHERE rowid = new.rowid;" \ 2055696Snw141292 "END" 2065696Snw141292 2075696Snw141292 #define TRIGGER_NAME_CACHE_TOLOWER_UPDATE \ 2085696Snw141292 "CREATE TRIGGER name_cache_tolower_name_update " \ 2095696Snw141292 "AFTER UPDATE ON name_cache " \ 2105696Snw141292 "BEGIN " \ 2115696Snw141292 " UPDATE name_cache SET name = lower_utf8(canon_name)" \ 2125696Snw141292 " WHERE rowid = new.rowid;" \ 2135696Snw141292 "END" 2145696Snw141292 2155696Snw141292 #define INDEX_NAME_CACHE_SID \ 2165696Snw141292 "CREATE UNIQUE INDEX name_cache_sid ON name_cache" \ 2175696Snw141292 " (sidprefix, rid)" 2185696Snw141292 2195696Snw141292 #define INDEX_NAME_CACHE_NAME \ 2205696Snw141292 "CREATE UNIQUE INDEX name_cache_name ON name_cache" \ 2215696Snw141292 " (name, domain)" 2225696Snw141292 2235696Snw141292 #define CACHE_INSTALL_SQL \ 2245696Snw141292 TABLE_IDMAP_CACHE ";" \ 2255696Snw141292 INDEX_IDMAP_CACHE_SID_W2U ";" \ 2265696Snw141292 INDEX_IDMAP_CACHE_PID_U2W ";" \ 2275696Snw141292 TRIGGER_IDMAP_CACHE_TOLOWER_INSERT ";" \ 2285696Snw141292 TRIGGER_IDMAP_CACHE_TOLOWER_UPDATE ";" \ 2295696Snw141292 TABLE_NAME_CACHE ";" \ 2305696Snw141292 INDEX_NAME_CACHE_SID ";" \ 2315696Snw141292 INDEX_NAME_CACHE_NAME ";" \ 2325696Snw141292 TRIGGER_NAME_CACHE_TOLOWER_INSERT ";" \ 2335696Snw141292 TRIGGER_NAME_CACHE_TOLOWER_UPDATE ";" 2345696Snw141292 2355696Snw141292 #define CACHE_VERSION_SQL \ 2365696Snw141292 "SELECT CASE (SELECT count(*) FROM sqlite_master) WHEN 0 THEN 0 ELSE " \ 2375696Snw141292 "(CASE (SELECT count(*) FROM sqlite_master WHERE " \ 2385696Snw141292 "sql = '" TABLE_IDMAP_CACHE_v1 "' OR " \ 2395696Snw141292 "sql = '" INDEX_IDMAP_CACHE_SID_W2U_v1 "' OR " \ 2405696Snw141292 "sql = '" INDEX_IDMAP_CACHE_PID_U2W "' OR " \ 2415696Snw141292 "sql = '" TABLE_NAME_CACHE_v1 "' OR " \ 2425696Snw141292 "sql = '" INDEX_NAME_CACHE_SID "') " \ 2435696Snw141292 "WHEN 5 THEN 1 ELSE " \ 2445696Snw141292 "(CASE (SELECT count(*) FROM sqlite_master WHERE " \ 245*6386Sjp151216 "sql = '" TABLE_IDMAP_CACHE_v2"' OR " \ 246*6386Sjp151216 "sql = '" INDEX_IDMAP_CACHE_SID_W2U "' OR " \ 247*6386Sjp151216 "sql = '" INDEX_IDMAP_CACHE_PID_U2W "' OR " \ 248*6386Sjp151216 "sql = '" TRIGGER_IDMAP_CACHE_TOLOWER_INSERT "' OR " \ 249*6386Sjp151216 "sql = '" TRIGGER_IDMAP_CACHE_TOLOWER_UPDATE "' OR " \ 250*6386Sjp151216 "sql = '" TABLE_NAME_CACHE "' OR " \ 251*6386Sjp151216 "sql = '" INDEX_NAME_CACHE_SID "' OR " \ 252*6386Sjp151216 "sql = '" INDEX_NAME_CACHE_NAME "' OR " \ 253*6386Sjp151216 "sql = '" TRIGGER_NAME_CACHE_TOLOWER_INSERT "' OR " \ 254*6386Sjp151216 "sql = '" TRIGGER_NAME_CACHE_TOLOWER_UPDATE "') " \ 255*6386Sjp151216 "WHEN 10 THEN 2 ELSE " \ 256*6386Sjp151216 "(CASE (SELECT count(*) FROM sqlite_master WHERE " \ 2575696Snw141292 "sql = '" TABLE_IDMAP_CACHE"' OR " \ 2585696Snw141292 "sql = '" INDEX_IDMAP_CACHE_SID_W2U "' OR " \ 2595696Snw141292 "sql = '" INDEX_IDMAP_CACHE_PID_U2W "' OR " \ 2605696Snw141292 "sql = '" TRIGGER_IDMAP_CACHE_TOLOWER_INSERT "' OR " \ 2615696Snw141292 "sql = '" TRIGGER_IDMAP_CACHE_TOLOWER_UPDATE "' OR " \ 2625696Snw141292 "sql = '" TABLE_NAME_CACHE "' OR " \ 2635696Snw141292 "sql = '" INDEX_NAME_CACHE_SID "' OR " \ 2645696Snw141292 "sql = '" INDEX_NAME_CACHE_NAME "' OR " \ 2655696Snw141292 "sql = '" TRIGGER_NAME_CACHE_TOLOWER_INSERT "' OR " \ 2665696Snw141292 "sql = '" TRIGGER_NAME_CACHE_TOLOWER_UPDATE "') " \ 267*6386Sjp151216 "WHEN 10 THEN 3 ELSE -1 END) END) END) END AS version;" 2685696Snw141292 2695696Snw141292 #define CACHE_UPGRADE_FROM_v1_SQL \ 2705696Snw141292 "DROP TABLE idmap_cache;" \ 2715696Snw141292 "DROP TABLE name_cache;" \ 2725696Snw141292 CACHE_INSTALL_SQL 2735696Snw141292 274*6386Sjp151216 #define CACHE_UPGRADE_FROM_v2_SQL \ 275*6386Sjp151216 "DROP TABLE idmap_cache;" \ 276*6386Sjp151216 "DROP TABLE name_cache;" \ 277*6386Sjp151216 CACHE_INSTALL_SQL 278*6386Sjp151216 279*6386Sjp151216 #define CACHE_VERSION 3 2805696Snw141292 2815696Snw141292 2825696Snw141292 #define TABLE_NAMERULES_v1 \ 2835696Snw141292 "CREATE TABLE namerules (" \ 2845696Snw141292 " is_user INTEGER NOT NULL," \ 2855696Snw141292 " windomain TEXT," \ 2865696Snw141292 " winname TEXT NOT NULL," \ 2875696Snw141292 " is_nt4 INTEGER NOT NULL," \ 2885696Snw141292 " unixname NOT NULL," \ 2895696Snw141292 " w2u_order INTEGER," \ 2905696Snw141292 " u2w_order INTEGER" \ 2915696Snw141292 ")" 2925696Snw141292 2935696Snw141292 #define TABLE_NAMERULES_BODY \ 2945696Snw141292 "(" \ 2955696Snw141292 " is_user INTEGER NOT NULL," \ 2965696Snw141292 " is_wuser INTEGER NOT NULL," \ 2975696Snw141292 " windomain TEXT," \ 2985696Snw141292 " winname_display TEXT NOT NULL," \ 2995696Snw141292 " winname TEXT," \ 3005696Snw141292 " is_nt4 INTEGER NOT NULL," \ 3015696Snw141292 " unixname NOT NULL," \ 3025696Snw141292 " w2u_order INTEGER," \ 3035696Snw141292 " u2w_order INTEGER" \ 3045696Snw141292 ")" 3055696Snw141292 3065696Snw141292 #define TABLE_NAMERULES \ 3075696Snw141292 "CREATE TABLE namerules " \ 3085696Snw141292 TABLE_NAMERULES_BODY 3095696Snw141292 3105696Snw141292 #define INDEX_NAMERULES_W2U_v1 \ 3115696Snw141292 "CREATE UNIQUE INDEX namerules_w2u ON namerules" \ 3125696Snw141292 " (winname, windomain, is_user, w2u_order)" 3135696Snw141292 3145696Snw141292 #define INDEX_NAMERULES_W2U \ 3155696Snw141292 "CREATE UNIQUE INDEX namerules_w2u ON namerules" \ 3165696Snw141292 " (winname, windomain, is_user, is_wuser, w2u_order)" 3175696Snw141292 3185696Snw141292 #define INDEX_NAMERULES_U2W \ 3195696Snw141292 "CREATE UNIQUE INDEX namerules_u2w ON namerules" \ 3205696Snw141292 " (unixname, is_user, u2w_order)" 3215696Snw141292 3225696Snw141292 #define TRIGGER_NAMERULES_TOLOWER_BODY \ 3235696Snw141292 "BEGIN " \ 3245696Snw141292 " UPDATE namerules SET winname = lower_utf8(winname_display)" \ 3255696Snw141292 " WHERE rowid = new.rowid;" \ 3265696Snw141292 "END" 3275696Snw141292 3285696Snw141292 #define TRIGGER_NAMERULES_TOLOWER_INSERT \ 3295696Snw141292 "CREATE TRIGGER namerules_tolower_name_insert " \ 3305696Snw141292 "AFTER INSERT ON namerules " \ 3315696Snw141292 TRIGGER_NAMERULES_TOLOWER_BODY 3325696Snw141292 3335696Snw141292 #define TRIGGER_NAMERULES_TOLOWER_UPDATE \ 3345696Snw141292 "CREATE TRIGGER namerules_tolower_name_update " \ 3355696Snw141292 "AFTER UPDATE ON namerules " \ 3365696Snw141292 TRIGGER_NAMERULES_TOLOWER_BODY 3375696Snw141292 3385696Snw141292 #define TRIGGER_NAMERULES_UNIQUE_BODY \ 3395696Snw141292 " SELECT CASE (SELECT count(*) FROM namerules AS n" \ 3405696Snw141292 " WHERE n.unixname = NEW.unixname AND" \ 3415696Snw141292 " n.is_user = NEW.is_user AND" \ 3425696Snw141292 " (n.winname != lower(NEW.winname_display) OR" \ 3435696Snw141292 " n.windomain != NEW.windomain ) AND" \ 3445696Snw141292 " n.u2w_order = NEW.u2w_order AND" \ 3455696Snw141292 " n.is_wuser != NEW.is_wuser) > 0" \ 3465696Snw141292 " WHEN 1 THEN" \ 3475696Snw141292 " raise(ROLLBACK, 'Conflicting w2u namerules')"\ 3485696Snw141292 " END; " \ 3495696Snw141292 "END" 3505696Snw141292 3515696Snw141292 #define TRIGGER_NAMERULES_UNIQUE_INSERT \ 3525696Snw141292 "CREATE TRIGGER namerules_unique_insert " \ 3535696Snw141292 "BEFORE INSERT ON namerules " \ 3545696Snw141292 "BEGIN " \ 3555696Snw141292 TRIGGER_NAMERULES_UNIQUE_BODY 3565696Snw141292 3575696Snw141292 #define TRIGGER_NAMERULES_UNIQUE_UPDATE \ 3585696Snw141292 "CREATE TRIGGER namerules_unique_update " \ 3595696Snw141292 "BEFORE INSERT ON namerules " \ 3605696Snw141292 "BEGIN " \ 3615696Snw141292 TRIGGER_NAMERULES_UNIQUE_BODY 3625696Snw141292 3635696Snw141292 #define DB_INSTALL_SQL \ 3645696Snw141292 TABLE_NAMERULES ";" \ 3655696Snw141292 INDEX_NAMERULES_W2U ";" \ 3665696Snw141292 INDEX_NAMERULES_U2W ";" \ 3675696Snw141292 TRIGGER_NAMERULES_TOLOWER_INSERT ";" \ 3685696Snw141292 TRIGGER_NAMERULES_TOLOWER_UPDATE ";" \ 3695696Snw141292 TRIGGER_NAMERULES_UNIQUE_INSERT ";" \ 3705696Snw141292 TRIGGER_NAMERULES_UNIQUE_UPDATE ";" 3715696Snw141292 3725696Snw141292 #define DB_VERSION_SQL \ 3735696Snw141292 "SELECT CASE (SELECT count(*) FROM sqlite_master) WHEN 0 THEN 0 ELSE " \ 3745696Snw141292 "(CASE (SELECT count(*) FROM sqlite_master WHERE " \ 3755696Snw141292 "sql = '" TABLE_NAMERULES_v1 "' OR " \ 3765696Snw141292 "sql = '" INDEX_NAMERULES_W2U_v1 "' OR " \ 3775696Snw141292 "sql = '" INDEX_NAMERULES_U2W "') " \ 3785696Snw141292 "WHEN 3 THEN 1 ELSE "\ 3795696Snw141292 "(CASE (SELECT count(*) FROM sqlite_master WHERE " \ 3805696Snw141292 "sql = '" TABLE_NAMERULES "' OR " \ 3815696Snw141292 "sql = '" INDEX_NAMERULES_W2U "' OR " \ 3825696Snw141292 "sql = '" INDEX_NAMERULES_U2W "' OR " \ 3835696Snw141292 "sql = '" TRIGGER_NAMERULES_TOLOWER_INSERT "' OR " \ 3845696Snw141292 "sql = '" TRIGGER_NAMERULES_TOLOWER_UPDATE "' OR " \ 3855696Snw141292 "sql = \"" TRIGGER_NAMERULES_UNIQUE_INSERT "\" OR " \ 3865696Snw141292 "sql = \"" TRIGGER_NAMERULES_UNIQUE_UPDATE "\") " \ 3875696Snw141292 "WHEN 7 THEN 2 ELSE -1 END) END) END AS version;" 3885696Snw141292 3895696Snw141292 /* SQL for upgrading an existing name rules DB. Includes DB_INSTALL_SQL */ 3905696Snw141292 #define DB_UPGRADE_FROM_v1_SQL \ 3915696Snw141292 "CREATE TABLE namerules_new " TABLE_NAMERULES_BODY ";" \ 3925696Snw141292 "INSERT INTO namerules_new SELECT is_user, is_user, windomain, " \ 3935696Snw141292 "winname, winname, is_nt4, unixname, w2u_order, u2w_order " \ 3945696Snw141292 "FROM namerules;" \ 3955696Snw141292 "DROP TABLE namerules;" \ 3965696Snw141292 DB_INSTALL_SQL \ 3975696Snw141292 "INSERT INTO namerules SELECT * FROM namerules_new;" \ 3985696Snw141292 "DROP TABLE namerules_new;" 3995696Snw141292 4005696Snw141292 #define DB_VERSION 2 4015696Snw141292 4025696Snw141292 #ifdef __cplusplus 4035696Snw141292 } 4045696Snw141292 #endif 4055696Snw141292 4065696Snw141292 4075696Snw141292 #endif /* _SCHEMA_H */ 408