/****************************************************************************** * Stores a copy of the non-key data for the row. *****************************************************************************/ int storeData(char *cpTableName, HeapTuple tTupleData, TupleDesc tTupleDesc, Oid tableOid, int iIncludeKeyData) { Oid planArgTypes[1] = {NAMEOID}; char *insQuery = "INSERT INTO dbmirror_pendingdata (SeqId,IsKey,Data) VALUES(currval('dbmirror_pending_seqid_seq'),'f',$1)"; void *pplan; Datum planData[1]; char *cpKeyData; int iRetValue; pplan = SPI_prepare(insQuery, 1, planArgTypes); if (pplan == NULL) { elog(NOTICE, "could not prepare INSERT plan"); return -1; } /* pplan = SPI_saveplan(pplan); */ if (iIncludeKeyData == 0) cpKeyData = packageData(tTupleData, tTupleDesc, tableOid, NONPRIMARY); else cpKeyData = packageData(tTupleData, tTupleDesc, tableOid, ALL); planData[0] = PointerGetDatum(cpKeyData); iRetValue = SPI_execp(pplan, planData, NULL, 1); if (cpKeyData != 0) SPI_pfree(cpKeyData); if (iRetValue != SPI_OK_INSERT) { elog(NOTICE, "error inserting row in pendingDelete"); return -1; } debug_msg("dbmirror:storeKeyData insert successful"); return 0; }
int storeKeyInfo(char *cpTableName, HeapTuple tTupleData, TupleDesc tTupleDesc, Oid tableOid) { Oid saPlanArgTypes[1] = {NAMEOID}; char *insQuery = "INSERT INTO dbmirror_pendingdata (SeqId,IsKey,Data) VALUES(currval('dbmirror_pending_seqid_seq'),'t',$1)"; void *pplan; Datum saPlanData[1]; char *cpKeyData; int iRetCode; pplan = SPI_prepare(insQuery, 1, saPlanArgTypes); if (pplan == NULL) { elog(NOTICE, "could not prepare INSERT plan"); return -1; } /* pplan = SPI_saveplan(pplan); */ cpKeyData = packageData(tTupleData, tTupleDesc, tableOid, PRIMARY); if (cpKeyData == NULL) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), /* cpTableName already contains quotes... */ errmsg("there is no PRIMARY KEY for table %s", cpTableName))); debug_msg2("dbmirror:storeKeyInfo key data: %s", cpKeyData); saPlanData[0] = PointerGetDatum(cpKeyData); iRetCode = SPI_execp(pplan, saPlanData, NULL, 1); if (cpKeyData != NULL) SPI_pfree(cpKeyData); if (iRetCode != SPI_OK_INSERT) ereport(ERROR, (errcode(ERRCODE_TRIGGERED_ACTION_EXCEPTION), errmsg("error inserting row in pendingDelete"))); debug_msg("insert successful"); return 0; }
bool ConnectDb:: execCommand(string& spName,int timeParm,string& ret) { try { DBCommand.setConnection(&DBConnection); DBCommand.setCommandText(spName.c_str(), SA_CmdStoredProc); const char* m_param = "time"; DBCommand.CreateParam(m_param, SA_dtLong, SA_ParamInput); DBCommand.Param(m_param).setAsLong() = timeParm; DBCommand.Execute(); packageData(ret); DBCommand.DestroyParams(); } catch(SAException &ex) { AC_ERROR("error %d:%s\n", ex.ErrNativeCode(), (const char*)ex.ErrText()); return false; } return true; }