xref: /reactos/dll/win32/msi/drop.c (revision 0c2cdcae)
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