ReactOS 0.4.15-dev-7958-gcd0bb1a
update.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
#include "wine/debug.h"
#include "msi.h"
#include "msiquery.h"
#include "objbase.h"
#include "objidl.h"
#include "msipriv.h"
#include "winnls.h"
#include "query.h"
Include dependency graph for update.c:

Go to the source code of this file.

Classes

struct  tagMSIUPDATEVIEW
 

Typedefs

typedef struct tagMSIUPDATEVIEW MSIUPDATEVIEW
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msidb)
 
static UINT UPDATE_fetch_int (struct tagMSIVIEW *view, UINT row, UINT col, UINT *val)
 
static UINT UPDATE_execute (struct tagMSIVIEW *view, MSIRECORD *record)
 
static UINT UPDATE_close (struct tagMSIVIEW *view)
 
static UINT UPDATE_get_dimensions (struct tagMSIVIEW *view, UINT *rows, UINT *cols)
 
static UINT UPDATE_get_column_info (struct tagMSIVIEW *view, UINT n, LPCWSTR *name, UINT *type, BOOL *temporary, LPCWSTR *table_name)
 
static UINT UPDATE_modify (struct tagMSIVIEW *view, MSIMODIFY eModifyMode, MSIRECORD *rec, UINT row)
 
static UINT UPDATE_delete (struct tagMSIVIEW *view)
 
UINT UPDATE_CreateView (MSIDATABASE *db, MSIVIEW **view, LPWSTR table, column_info *columns, struct expr *expr)
 

Variables

static const MSIVIEWOPS update_ops
 

Typedef Documentation

◆ MSIUPDATEVIEW

Function Documentation

◆ UPDATE_close()

static UINT UPDATE_close ( struct tagMSIVIEW view)
static

Definition at line 129 of file update.c.

130{
132 MSIVIEW *wv;
133
134 TRACE("%p\n", uv);
135
136 wv = uv->wv;
137 if( !wv )
139
140 return wv->ops->close( wv );
141}
#define TRACE(s)
Definition: solgame.cpp:4
MSIVIEW * wv
Definition: update.c:45
UINT(* close)(struct tagMSIVIEW *view)
Definition: msipriv.h:298
const MSIVIEWOPS * ops
Definition: msipriv.h:355
#define ERROR_FUNCTION_FAILED
Definition: winerror.h:985

◆ UPDATE_CreateView()

UINT UPDATE_CreateView ( MSIDATABASE db,
MSIVIEW **  view,
LPWSTR  table,
column_info columns,
struct expr expr 
)

Definition at line 220 of file update.c.

222{
223 MSIUPDATEVIEW *uv = NULL;
224 UINT r;
225 MSIVIEW *sv = NULL, *wv = NULL;
226
227 TRACE("%p\n", uv );
228
229 if (expr)
230 r = WHERE_CreateView( db, &wv, table, expr );
231 else
232 r = TABLE_CreateView( db, table, &wv );
233
234 if( r != ERROR_SUCCESS )
235 return r;
236
237 /* then select the columns we want */
238 r = SELECT_CreateView( db, &sv, wv, columns );
239 if( r != ERROR_SUCCESS )
240 {
241 wv->ops->delete( wv );
242 return r;
243 }
244
245 uv = msi_alloc_zero( sizeof *uv );
246 if( !uv )
247 {
248 wv->ops->delete( wv );
250 }
251
252 /* fill the structure */
253 uv->view.ops = &update_ops;
254 msiobj_addref( &db->hdr );
255 uv->db = db;
256 uv->vals = columns;
257 uv->wv = sv;
258 *view = (MSIVIEW*) uv;
259
260 return ERROR_SUCCESS;
261}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
void msiobj_addref(MSIOBJECTHDR *info)
Definition: handle.c:217
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static void * msi_alloc_zero(size_t len) __WINE_ALLOC_SIZE(1)
Definition: msipriv.h:1148
unsigned int UINT
Definition: ndis.h:50
UINT TABLE_CreateView(MSIDATABASE *db, LPCWSTR name, MSIVIEW **view) DECLSPEC_HIDDEN
Definition: table.c:2189
UINT WHERE_CreateView(MSIDATABASE *db, MSIVIEW **view, LPWSTR tables, struct expr *cond) DECLSPEC_HIDDEN
Definition: where.c:1226
UINT SELECT_CreateView(MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table, const column_info *columns) DECLSPEC_HIDDEN
Definition: select.c:423
Definition: query.h:87
MSIOBJECTHDR hdr
Definition: msipriv.h:108
MSIDATABASE * db
Definition: update.c:44
MSIVIEW view
Definition: update.c:43
column_info * vals
Definition: update.c:46
static const MSIVIEWOPS update_ops
Definition: update.c:198

◆ UPDATE_delete()

static UINT UPDATE_delete ( struct tagMSIVIEW view)
static

Definition at line 182 of file update.c.

183{
185 MSIVIEW *wv;
186
187 TRACE("%p\n", uv );
188
189 wv = uv->wv;
190 if( wv )
191 wv->ops->delete( wv );
192 msiobj_release( &uv->db->hdr );
193 msi_free( uv );
194
195 return ERROR_SUCCESS;
196}
int msiobj_release(MSIOBJECTHDR *info)
Definition: handle.c:241
static void msi_free(void *mem)
Definition: msipriv.h:1159
UINT(* delete)(struct tagMSIVIEW *)
Definition: msipriv.h:324

◆ UPDATE_execute()

static UINT UPDATE_execute ( struct tagMSIVIEW view,
MSIRECORD record 
)
static

Definition at line 58 of file update.c.

59{
61 UINT i, r, col_count = 0, row_count = 0;
63 MSIRECORD *where = NULL;
64 MSIVIEW *wv;
65 UINT cols_count, where_count;
66 column_info *col = uv->vals;
67
68 TRACE("%p %p\n", uv, record );
69
70 /* extract the where markers from the record */
71 if (record)
72 {
74
75 for (i = 0; col; col = col->next)
76 i++;
77
78 cols_count = i;
79 where_count = r - i;
80
81 if (where_count > 0)
82 {
83 where = MSI_CreateRecord(where_count);
84
85 if (where)
86 for (i = 1; i <= where_count; i++)
87 MSI_RecordCopyField(record, cols_count + i, where, i);
88 }
89 }
90
91 wv = uv->wv;
92 if( !wv )
93 {
95 goto done;
96 }
97
98 r = wv->ops->execute( wv, where );
99 TRACE("tv execute returned %x\n", r);
100 if( r )
101 goto done;
102
103 r = wv->ops->get_dimensions( wv, &row_count, &col_count );
104 if( r )
105 goto done;
106
107 values = msi_query_merge_record( col_count, uv->vals, record );
108 if (!values)
109 {
111 goto done;
112 }
113
114 for ( i=0; i<row_count; i++ )
115 {
116 r = msi_select_update( wv, values, i );
117 if (r != ERROR_SUCCESS)
118 break;
119 }
120
121done:
122 if ( where ) msiobj_release( &where->hdr );
123 if ( values ) msiobj_release( &values->hdr );
124
125 return r;
126}
GLboolean GLenum GLenum GLvoid * values
Definition: glext.h:5666
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
MSIRECORD * msi_query_merge_record(UINT fields, const column_info *vl, MSIRECORD *rec)
Definition: insert.c:66
UINT MSI_RecordGetFieldCount(const MSIRECORD *rec) DECLSPEC_HIDDEN
Definition: record.c:108
MSIRECORD * MSI_CreateRecord(UINT) DECLSPEC_HIDDEN
Definition: record.c:76
UINT MSI_RecordCopyField(MSIRECORD *, UINT, MSIRECORD *, UINT) DECLSPEC_HIDDEN
Definition: record.c:166
UINT msi_select_update(MSIVIEW *view, MSIRECORD *rec, UINT row) DECLSPEC_HIDDEN
Definition: select.c:249
struct _column_info * next
Definition: msipriv.h:226
MSIOBJECTHDR hdr
Definition: msipriv.h:151
UINT(* get_dimensions)(struct tagMSIVIEW *view, UINT *rows, UINT *cols)
Definition: msipriv.h:306
UINT(* execute)(struct tagMSIVIEW *view, MSIRECORD *record)
Definition: msipriv.h:293

◆ UPDATE_fetch_int()

static UINT UPDATE_fetch_int ( struct tagMSIVIEW view,
UINT  row,
UINT  col,
UINT val 
)
static

Definition at line 49 of file update.c.

50{
52
53 TRACE("%p %d %d %p\n", uv, row, col, val );
54
56}
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
Definition: typeof.h:78
GLuint GLfloat * val
Definition: glext.h:7180

◆ UPDATE_get_column_info()

static UINT UPDATE_get_column_info ( struct tagMSIVIEW view,
UINT  n,
LPCWSTR name,
UINT type,
BOOL temporary,
LPCWSTR table_name 
)
static

Definition at line 157 of file update.c.

159{
161 MSIVIEW *wv;
162
163 TRACE("%p %d %p %p %p %p\n", uv, n, name, type, temporary, table_name );
164
165 wv = uv->wv;
166 if( !wv )
168
169 return wv->ops->get_column_info( wv, n, name, type, temporary, table_name );
170}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLdouble n
Definition: glext.h:7729
Definition: name.c:39
UINT(* get_column_info)(struct tagMSIVIEW *view, UINT n, LPCWSTR *name, UINT *type, BOOL *temporary, LPCWSTR *table_name)
Definition: msipriv.h:313

◆ UPDATE_get_dimensions()

static UINT UPDATE_get_dimensions ( struct tagMSIVIEW view,
UINT rows,
UINT cols 
)
static

Definition at line 143 of file update.c.

144{
146 MSIVIEW *wv;
147
148 TRACE("%p %p %p\n", uv, rows, cols );
149
150 wv = uv->wv;
151 if( !wv )
153
154 return wv->ops->get_dimensions( wv, rows, cols );
155}

◆ UPDATE_modify()

static UINT UPDATE_modify ( struct tagMSIVIEW view,
MSIMODIFY  eModifyMode,
MSIRECORD rec,
UINT  row 
)
static

Definition at line 172 of file update.c.

174{
176
177 TRACE("%p %d %p\n", uv, eModifyMode, rec );
178
180}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msidb  )

Variable Documentation

◆ update_ops

const MSIVIEWOPS update_ops
static
Initial value:
=
{
}
static UINT UPDATE_execute(struct tagMSIVIEW *view, MSIRECORD *record)
Definition: update.c:58
static UINT UPDATE_get_column_info(struct tagMSIVIEW *view, UINT n, LPCWSTR *name, UINT *type, BOOL *temporary, LPCWSTR *table_name)
Definition: update.c:157
static UINT UPDATE_close(struct tagMSIVIEW *view)
Definition: update.c:129
static UINT UPDATE_get_dimensions(struct tagMSIVIEW *view, UINT *rows, UINT *cols)
Definition: update.c:143
static UINT UPDATE_delete(struct tagMSIVIEW *view)
Definition: update.c:182
static UINT UPDATE_modify(struct tagMSIVIEW *view, MSIMODIFY eModifyMode, MSIRECORD *rec, UINT row)
Definition: update.c:172
static UINT UPDATE_fetch_int(struct tagMSIVIEW *view, UINT row, UINT col, UINT *val)
Definition: update.c:49

Definition at line 198 of file update.c.

Referenced by UPDATE_CreateView().