@ -618,12 +618,12 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner,
*/
*/
resetStringInfo ( & querybuf ) ;
resetStringInfo ( & querybuf ) ;
appendStringInfo ( & querybuf ,
appendStringInfo ( & querybuf ,
" SELECT newdata FROM %s newdata "
" SELECT _$ newdata FROM %s _$ newdata "
" WHERE newdata IS NOT NULL AND EXISTS "
" WHERE _$ newdata IS NOT NULL AND EXISTS "
" (SELECT 1 FROM %s newdata2 WHERE newdata2 IS NOT NULL "
" (SELECT 1 FROM %s _$ newdata2 WHERE _$ newdata2 IS NOT NULL "
" AND newdata2 OPERATOR(pg_catalog.*=) newdata "
" AND _$ newdata2 OPERATOR(pg_catalog.*=) _$ newdata "
" AND newdata2.ctid OPERATOR(pg_catalog.<>) "
" AND _$ newdata2.ctid OPERATOR(pg_catalog.<>) "
" newdata.ctid) " ,
" _$ newdata.ctid)" ,
tempname , tempname ) ;
tempname , tempname ) ;
if ( SPI_execute ( querybuf . data , false , 1 ) ! = SPI_OK_SELECT )
if ( SPI_execute ( querybuf . data , false , 1 ) ! = SPI_OK_SELECT )
elog ( ERROR , " SPI_exec failed: %s " , querybuf . data ) ;
elog ( ERROR , " SPI_exec failed: %s " , querybuf . data ) ;
@ -651,8 +651,8 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner,
resetStringInfo ( & querybuf ) ;
resetStringInfo ( & querybuf ) ;
appendStringInfo ( & querybuf ,
appendStringInfo ( & querybuf ,
" CREATE TEMP TABLE %s AS "
" CREATE TEMP TABLE %s AS "
" SELECT mv.ctid AS tid, newdata "
" SELECT _$ mv.ctid AS tid, _$ newdata "
" FROM %s mv FULL JOIN %s newdata ON ( " ,
" FROM %s _$ mv FULL JOIN %s _$ newdata ON ( " ,
diffname , matviewname , tempname ) ;
diffname , matviewname , tempname ) ;
/*
/*
@ -745,9 +745,9 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner,
if ( foundUniqueIndex )
if ( foundUniqueIndex )
appendStringInfoString ( & querybuf , " AND " ) ;
appendStringInfoString ( & querybuf , " AND " ) ;
leftop = quote_qualified_identifier ( " newdata " ,
leftop = quote_qualified_identifier ( " _$ newdata" ,
NameStr ( attr - > attname ) ) ;
NameStr ( attr - > attname ) ) ;
rightop = quote_qualified_identifier ( " mv " ,
rightop = quote_qualified_identifier ( " _$ mv" ,
NameStr ( attr - > attname ) ) ;
NameStr ( attr - > attname ) ) ;
generate_operator_clause ( & querybuf ,
generate_operator_clause ( & querybuf ,
@ -775,8 +775,8 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner,
Assert ( foundUniqueIndex ) ;
Assert ( foundUniqueIndex ) ;
appendStringInfoString ( & querybuf ,
appendStringInfoString ( & querybuf ,
" AND newdata OPERATOR(pg_catalog.*=) mv) "
" AND _$ newdata OPERATOR(pg_catalog.*=) _$ mv) "
" WHERE newdata IS NULL OR mv IS NULL "
" WHERE _$ newdata IS NULL OR _$ mv IS NULL "
" ORDER BY tid " ) ;
" ORDER BY tid " ) ;
/* Create the temporary "diff" table. */
/* Create the temporary "diff" table. */
@ -802,10 +802,10 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner,
/* Deletes must come before inserts; do them first. */
/* Deletes must come before inserts; do them first. */
resetStringInfo ( & querybuf ) ;
resetStringInfo ( & querybuf ) ;
appendStringInfo ( & querybuf ,
appendStringInfo ( & querybuf ,
" DELETE FROM %s mv WHERE ctid OPERATOR(pg_catalog.=) ANY "
" DELETE FROM %s _$ mv WHERE ctid OPERATOR(pg_catalog.=) ANY "
" (SELECT diff.tid FROM %s diff "
" (SELECT _$ diff.tid FROM %s _$ diff "
" WHERE diff.tid IS NOT NULL "
" WHERE _$ diff.tid IS NOT NULL "
" AND diff.newdata IS NULL) " ,
" AND _$ diff._$ newdata IS NULL) " ,
matviewname , diffname ) ;
matviewname , diffname ) ;
if ( SPI_exec ( querybuf . data , 0 ) ! = SPI_OK_DELETE )
if ( SPI_exec ( querybuf . data , 0 ) ! = SPI_OK_DELETE )
elog ( ERROR , " SPI_exec failed: %s " , querybuf . data ) ;
elog ( ERROR , " SPI_exec failed: %s " , querybuf . data ) ;
@ -813,8 +813,8 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner,
/* Inserts go last. */
/* Inserts go last. */
resetStringInfo ( & querybuf ) ;
resetStringInfo ( & querybuf ) ;
appendStringInfo ( & querybuf ,
appendStringInfo ( & querybuf ,
" INSERT INTO %s SELECT (diff.newdata).* "
" INSERT INTO %s SELECT (_$ diff._$ newdata).* "
" FROM %s diff WHERE tid IS NULL " ,
" FROM %s _$ diff WHERE tid IS NULL " ,
matviewname , diffname ) ;
matviewname , diffname ) ;
if ( SPI_exec ( querybuf . data , 0 ) ! = SPI_OK_INSERT )
if ( SPI_exec ( querybuf . data , 0 ) ! = SPI_OK_INSERT )
elog ( ERROR , " SPI_exec failed: %s " , querybuf . data ) ;
elog ( ERROR , " SPI_exec failed: %s " , querybuf . data ) ;