[WINESYNC] msi: Support removing temporary columns in TABLE_remove_column.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 5d568279dc0b842206918ba87a955298e72973ae by Piotr Caban <piotr@codeweavers.com>
This commit is contained in:
winesync 2022-03-13 19:08:40 +01:00 committed by Mark Jansen
parent f78dfeafac
commit 5c718f5f5c
No known key found for this signature in database
GPG key ID: B39240EE84BEAE8B

View file

@ -1966,6 +1966,20 @@ static UINT TABLE_remove_column(struct tagMSIVIEW *view, LPCWSTR table, UINT num
MSIVIEW *columns = NULL;
UINT row, r;
if (tv->table->col_count != number)
return ERROR_BAD_QUERY_SYNTAX;
if (tv->table->colinfo[number-1].temporary)
{
UINT size = tv->table->colinfo[number-1].offset;
tv->table->col_count--;
tv->table->colinfo = msi_realloc( tv->table->colinfo, sizeof(*tv->table->colinfo) * tv->table->col_count );
for (row = 0; row < tv->table->row_count; row++)
tv->table->data[row] = msi_realloc( tv->table->data[row], size );
return ERROR_SUCCESS;
}
rec = MSI_CreateRecord(2);
if (!rec)
return ERROR_OUTOFMEMORY;
@ -2000,11 +2014,12 @@ static UINT TABLE_release(struct tagMSIVIEW *view)
{
MSITABLEVIEW *tv = (MSITABLEVIEW*)view;
INT ref = tv->table->ref_count;
UINT i, r;
UINT r;
INT i;
TRACE("%p %d\n", view, ref);
for (i = 0; i < tv->table->col_count; i++)
for (i = tv->table->col_count - 1; i >= 0; i--)
{
if (tv->table->colinfo[i].type & MSITYPE_TEMPORARY)
{