1 /* 2 * Implementation of the Microsoft Installer (msi.dll) 3 * 4 * Copyright 2008 James Hawkins 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 #include <stdarg.h> 22 23 #include "windef.h" 24 #include "winbase.h" 25 #include "winerror.h" 26 #include "wine/debug.h" 27 #include "msi.h" 28 #include "msiquery.h" 29 #include "objbase.h" 30 #include "objidl.h" 31 #include "msipriv.h" 32 33 #include "query.h" 34 35 WINE_DEFAULT_DEBUG_CHANNEL(msidb); 36 37 struct drop_view 38 { 39 MSIVIEW view; 40 MSIDATABASE *db; 41 MSIVIEW *table; 42 column_info *colinfo; 43 INT hold; 44 }; 45 46 static UINT DROP_execute(struct tagMSIVIEW *view, MSIRECORD *record) 47 { 48 struct drop_view *dv = (struct drop_view *)view; 49 UINT r; 50 51 TRACE("%p %p\n", dv, record); 52 53 if( !dv->table ) 54 return ERROR_FUNCTION_FAILED; 55 56 r = dv->table->ops->execute(dv->table, record); 57 if (r != ERROR_SUCCESS) 58 return r; 59 60 return dv->table->ops->drop(dv->table); 61 } 62 63 static UINT DROP_close(struct tagMSIVIEW *view) 64 { 65 struct drop_view *dv = (struct drop_view *)view; 66 67 TRACE("%p\n", dv); 68 69 return ERROR_SUCCESS; 70 } 71 72 static UINT DROP_get_dimensions(struct tagMSIVIEW *view, UINT *rows, UINT *cols) 73 { 74 struct drop_view *dv = (struct drop_view *)view; 75 76 TRACE("%p %p %p\n", dv, rows, cols); 77 78 return ERROR_FUNCTION_FAILED; 79 } 80 81 static UINT DROP_delete( struct tagMSIVIEW *view ) 82 { 83 struct drop_view *dv = (struct drop_view *)view; 84 85 TRACE("%p\n", dv ); 86 87 if( dv->table ) 88 dv->table->ops->delete( dv->table ); 89 90 free( dv ); 91 92 return ERROR_SUCCESS; 93 } 94 95 static const MSIVIEWOPS drop_ops = 96 { 97 NULL, 98 NULL, 99 NULL, 100 NULL, 101 NULL, 102 NULL, 103 NULL, 104 NULL, 105 DROP_execute, 106 DROP_close, 107 DROP_get_dimensions, 108 NULL, 109 NULL, 110 DROP_delete, 111 NULL, 112 NULL, 113 NULL, 114 NULL, 115 NULL, 116 }; 117 118 UINT DROP_CreateView(MSIDATABASE *db, MSIVIEW **view, LPCWSTR name) 119 { 120 struct drop_view *dv; 121 UINT r; 122 123 TRACE("%p %s\n", view, debugstr_w(name)); 124 125 dv = calloc(1, sizeof *dv); 126 if(!dv) 127 return ERROR_FUNCTION_FAILED; 128 129 r = TABLE_CreateView(db, name, &dv->table); 130 if (r != ERROR_SUCCESS) 131 { 132 free( dv ); 133 return r; 134 } 135 136 dv->view.ops = &drop_ops; 137 dv->db = db; 138 139 *view = (MSIVIEW *)dv; 140 141 return ERROR_SUCCESS; 142 } 143