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 union ext_column 72 { 73 struct 74 { 75 LPCWSTR column; 76 LPCWSTR table; 77 } unparsed; 78 struct 79 { 80 UINT column; 81 struct join_table *table; 82 } parsed; 83 }; 84 85 struct expr 86 { 87 int type; 88 union 89 { 90 struct complex_expr expr; 91 INT ival; 92 UINT uval; 93 LPCWSTR sval; 94 union ext_column column; 95 } u; 96 }; 97 98 typedef struct 99 { 100 MSIDATABASE *db; 101 LPCWSTR command; 102 DWORD n, len; 103 UINT r; 104 MSIVIEW **view; /* View structure for the resulting query. This value 105 * tracks the view currently being created so we can free 106 * this view on syntax error. 107 */ 108 struct list *mem; 109 } SQL_input; 110 111 UINT MSI_ParseSQL( MSIDATABASE *db, LPCWSTR command, MSIVIEW **phview, struct list *mem ); 112 113 UINT TABLE_CreateView( MSIDATABASE *db, LPCWSTR name, MSIVIEW **view ); 114 115 UINT SELECT_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table, const column_info *columns ); 116 117 UINT DISTINCT_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table ); 118 119 UINT ORDER_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table, column_info *columns ); 120 121 UINT WHERE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR tables, struct expr *cond ); 122 123 UINT CREATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR table, 124 column_info *col_info, BOOL hold ); 125 126 UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR table, 127 column_info *columns, column_info *values, BOOL temp ); 128 129 UINT UPDATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table, 130 column_info *list, struct expr *expr ); 131 132 UINT DELETE_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table ); 133 134 UINT ALTER_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR name, column_info *colinfo, int hold ); 135 136 UINT STREAMS_CreateView( MSIDATABASE *db, MSIVIEW **view ); 137 138 UINT STORAGES_CreateView( MSIDATABASE *db, MSIVIEW **view ); 139 140 UINT DROP_CreateView( MSIDATABASE *db, MSIVIEW **view, LPCWSTR name ); 141 142 int sqliteGetToken(const WCHAR *z, int *tokenType, int *skip); 143 144 MSIRECORD *msi_query_merge_record( UINT fields, const column_info *vl, MSIRECORD *rec ); 145 146 UINT msi_create_table( MSIDATABASE *db, LPCWSTR name, column_info *col_info, 147 MSICONDITION persistent, BOOL hold ); 148 149 UINT msi_select_update( MSIVIEW *view, MSIRECORD *rec, UINT row ); 150 151 UINT msi_view_refresh_row( MSIDATABASE *db, MSIVIEW *view, UINT row, MSIRECORD *rec ); 152 153 #endif /* __WINE_MSI_QUERY_H */ 154