@@ -3069,11 +3069,40 @@ static UINT package_from_db(MSIHANDLE hdb, MSIHANDLE *handle)
30693069
30703070static void test_try_transform (void )
30713071{
3072+ static const struct {
3073+ const char * table ;
3074+ const char * column ;
3075+ const char * row ;
3076+ const char * data ;
3077+ const char * current ;
3078+ } transform_view [] = {
3079+ { "MOO" , "OOO" , "1" , "c" , "a" },
3080+ { "MOO" , "COW" , "" , "5378" , "3" },
3081+ { "MOO" , "PIG" , "" , "5378" , "4" },
3082+ { "MOO" , "PIG" , "1" , "5" , "" },
3083+ { "MOO" , "DELETE" , "3" , "" , "" },
3084+ { "BINARY" , "BLOB" , "1" , "BINARY.1" , "" },
3085+ { "BINARY" , "INSERT" , "1" , "" , "" },
3086+ { "AAR" , "CREATE" , "" , "" , "" },
3087+ { "AAR" , "CAR" , "" , "15871" , "1" },
3088+ { "AAR" , "BAR" , "" , "1282" , "2" },
3089+ { "AAR" , "BAR" , "vw" , "1" , "" },
3090+ { "AAR" , "BAR" , "bmw" , "2" , "" },
3091+ { "AAR" , "INSERT" , "vw" , "" , "" },
3092+ { "AAR" , "INSERT" , "bmw" , "" , "" },
3093+ { "Property" , "CREATE" , "" , "" , "" },
3094+ { "Property" , "Property" , "" , "11592" , "1" },
3095+ { "Property" , "Value" , "" , "7424" , "2" },
3096+ { "Property" , "Value" , "prop" , "val" , "" },
3097+ { "Property" , "INSERT" , "prop" , "" , "" }
3098+ };
3099+
30723100 MSIHANDLE hdb , hview , hrec , hpkg = 0 ;
30733101 LPCSTR query ;
30743102 UINT r ;
30753103 DWORD sz ;
30763104 char buffer [MAX_PATH ];
3105+ int i , matched ;
30773106
30783107 DeleteFileA (msifile );
30793108 DeleteFileA (mstfile );
@@ -3135,6 +3164,59 @@ static void test_try_transform(void)
31353164 r = MsiOpenDatabaseW (msifileW , MSIDBOPEN_DIRECT , & hdb );
31363165 ok ( r == ERROR_SUCCESS , "Failed to create database\n" );
31373166
3167+ r = MsiDatabaseApplyTransformA (hdb , mstfile , MSITRANSFORM_ERROR_VIEWTRANSFORM );
3168+ ok (r == ERROR_SUCCESS , "return code %d, should be ERROR_SUCCESS\n" , r );
3169+
3170+ query = "select * from `_TransformView`" ;
3171+ r = MsiDatabaseOpenViewA (hdb , query , & hview );
3172+ ok (r == ERROR_SUCCESS , "MsiDatabaseOpenView failed\n" );
3173+ r = MsiViewExecute (hview , 0 );
3174+ ok (r == ERROR_SUCCESS , "MsiViewExecute failed\n" );
3175+
3176+ r = MsiViewGetColumnInfo (hview , MSICOLINFO_NAMES , & hrec );
3177+ ok (r == ERROR_SUCCESS , "error\n" );
3178+ check_record (hrec , 5 , "Table" , "Column" , "Row" , "Data" , "Current" );
3179+ MsiCloseHandle (hrec );
3180+
3181+ r = MsiViewGetColumnInfo (hview , MSICOLINFO_TYPES , & hrec );
3182+ ok (r == ERROR_SUCCESS , "error\n" );
3183+ check_record (hrec , 5 , "g0" , "g0" , "G0" , "G0" , "G0" );
3184+ MsiCloseHandle (hrec );
3185+
3186+ matched = 0 ;
3187+ while (MsiViewFetch (hview , & hrec ) == ERROR_SUCCESS )
3188+ {
3189+ char data [5 ][256 ];
3190+
3191+ for (i = 1 ; i <= 5 ; i ++ ) {
3192+ sz = ARRAY_SIZE (data [0 ]);
3193+ r = MsiRecordGetStringA (hrec , i , data [i - 1 ], & sz );
3194+ ok (r == ERROR_SUCCESS , "%d) MsiRecordGetStringA failed %d\n" , i , r );
3195+ }
3196+
3197+ for (i = 0 ; i < ARRAY_SIZE (transform_view ); i ++ )
3198+ {
3199+ if (strcmp (data [0 ], transform_view [i ].table ) ||
3200+ strcmp (data [1 ], transform_view [i ].column ) ||
3201+ strcmp (data [2 ], transform_view [i ].row ))
3202+ continue ;
3203+
3204+ matched ++ ;
3205+ ok (!strcmp (data [3 ], transform_view [i ].data ), "%d) data[3] = %s\n" , i , data [3 ]);
3206+ ok (!strcmp (data [4 ], transform_view [i ].current ), "%d) data[4] = %s\n" , i , data [4 ]);
3207+ break ;
3208+ }
3209+ ok (i != ARRAY_SIZE (transform_view ), "invalid row: %s, %s, %s\n" ,
3210+ wine_dbgstr_a (data [0 ]), wine_dbgstr_a (data [1 ]), wine_dbgstr_a (data [2 ]));
3211+ MsiCloseHandle (hrec );
3212+ }
3213+ ok (matched == ARRAY_SIZE (transform_view ), "matched = %d\n" , matched );
3214+
3215+ r = MsiViewClose (hview );
3216+ ok (r == ERROR_SUCCESS , "MsiViewClose failed\n" );
3217+ r = MsiCloseHandle (hview );
3218+ ok (r == ERROR_SUCCESS , "MsiCloseHandle failed\n" );
3219+
31383220 r = MsiDatabaseApplyTransformA ( hdb , mstfile , 0 );
31393221 ok ( r == ERROR_SUCCESS , "return code %d, should be ERROR_SUCCESS\n" , r );
31403222
0 commit comments