1 /* 2 * Implementation of the Microsoft Installer (msi.dll) 3 * 4 * Copyright 2002 Mike McCormack for CodeWeavers 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 */ 20 21 #ifndef __WINE_MSI_QUERY_H 22 #define __WINE_MSI_QUERY_H 23 24 #include <stdarg.h> 25 26 #include "windef.h" 27 #include "winbase.h" 28 #include "objbase.h" 29 #include "objidl.h" 30 #include "msi.h" 31 #include "msiquery.h" 32 #include "msipriv.h" 33 #include "wine/list.h" 34 35 36 #define OP_EQ 1 37 #define OP_AND 2 38 #define OP_OR 3 39 #define OP_GT 4 40 #define OP_LT 5 41 #define OP_LE 6 42 #define OP_GE 7 43 #define OP_NE 8 44 #define OP_ISNULL 9 45 #define OP_NOTNULL 10 46 47 #define EXPR_COMPLEX 1 48 #define EXPR_COLUMN 2 49 #define EXPR_COL_NUMBER 3 50 #define EXPR_IVAL 4 51 #define EXPR_SVAL 5 52 #define EXPR_UVAL 6 53 #define EXPR_STRCMP 7 54 #define EXPR_WILDCARD 9 55 #define EXPR_COL_NUMBER_STRING 10 56 #define EXPR_COL_NUMBER32 11 57 #define EXPR_UNARY 12 58 59 struct sql_str { 60 LPCWSTR data; 61 INT len; 62 }; 63 64 struct complex_expr 65 { 66 UINT op; 67 struct expr *left; 68 struct expr *right; 69 }; 70 71 struct ext_column 72 { 73 LPCWSTR column; 74 LPCWSTR table; 75 }; 76 77 struct expr 78 { 79 int type; 80 union 81 { 82 struct complex_expr expr; 83 INT ival; 84 UINT uval; 85 LPCWSTR sval; 86 struct ext_column column; 87 UINT col_number; 88 } u; 89 }; 90 91 UINT MSI_ParseSQL( MSIDATABASE *db, LPCWSTR command, MSIVIEW **phview, 92 struct list *mem ); 93 94 UINT TABLE_CreateView( MSIDATABASE *db, LPCWSTR name, MSIVIEW **view ); 95 96 UINT SELECT_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table, 97 const column_info *columns ); 98 99 UINT DISTINCT_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table ); 100 101 UINT ORDER_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table, 102 column_info *columns ); 103 104 UINT WHERE_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table, 105 struct expr *cond ); 106 107 UINT CREATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR table, 108 column_info *col_info, BOOL hold ); 109 110 UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR table, 111 column_info *columns, column_info *values, BOOL temp ); 112 113 UINT UPDATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR table, 114 column_info *list, struct expr *expr ); 115 116 UINT DELETE_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table ); 117 118 UINT JOIN_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR tables ); 119 120 UINT ALTER_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR name, column_info *colinfo, int hold ); 121 122 UINT STREAMS_CreateView( MSIDATABASE *db, MSIVIEW **view ); 123 124 UINT STORAGES_CreateView( MSIDATABASE *db, MSIVIEW **view ); 125 126 UINT DROP_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR name ); 127 128 int sqliteGetToken(const WCHAR *z, int *tokenType); 129 130 MSIRECORD *msi_query_merge_record( UINT fields, const column_info *vl, MSIRECORD *rec ); 131 132 UINT msi_create_table( MSIDATABASE *db, LPCWSTR name, column_info *col_info, 133 MSICONDITION persistent, MSITABLE **table_ret); 134 135 #endif /* __WINE_MSI_QUERY_H */ 136