//update wave_detail_rpt set efile=%d where bool SPostgres::UpdateLobFromFile(SString sTable,SString sLobField,SString sWhere,SString sFile) { LOGBASEDEBUG("Into SPostgres::UpdateLobFromFile(%s,%s,%s,%s)", sTable.data(),sLobField.data(),sWhere.data(),sFile.data()); SString sql; Oid oid; SString param; PGresult *pRes = PQexec(m_pConn, "begin"); if(pRes == NULL) { if(TestConnect() == true)//连接可用 { LOGERROR("Error in SPostgres::UpdateLobFromFile, exec begin error, err=%s", PQerrorMessage(m_pConn)); return false; } //失败自动重连一次数据库 if(!Reconnect()) { LOGERROR("Error in SPostgres::UpdateLobFromFile, exec begin error, err=%s", PQerrorMessage(m_pConn)); return false; } pRes = PQexec(m_pConn, "begin"); if(pRes == NULL) { LOGERROR("Error in SPostgres::UpdateLobFromFile, exec begin error, err=%s", PQerrorMessage(m_pConn)); return false; } } PQclear(pRes); oid = lo_import(m_pConn, sFile.data()); if(oid == 0) { LOGERROR("Error in SPostgres::UpdateLobFromFile(%s,%s,%s,%s), err=%s", sTable.data(),sLobField.data(),sWhere.data(),sFile.data(),PQerrorMessage(m_pConn)); pRes = PQexec(m_pConn, "end"); if(pRes != NULL) PQclear(pRes); return false; } sql.sprintf("update %s set %s=%d where %s",sTable.data(),sLobField.data(),oid,sWhere.data()); pRes = PQexec(m_pConn, sql.data()); LOGBASEDEBUG("%s",sql.data()); if(pRes == NULL || PQresultStatus(pRes) != PGRES_COMMAND_OK ) { LOGERROR("Error in SPostgres::UpdateLobFromFile(%s,%s,%s,%s), sql=%s, err=%s", sTable.data(),sLobField.data(),sWhere.data(),sFile.data(),sql.data(),PQerrorMessage(m_pConn)); lo_unlink(m_pConn,oid); if(pRes != NULL) PQclear(pRes); pRes = PQexec(m_pConn, "end"); if(pRes != NULL) PQclear(pRes); return false; } PQclear(pRes);//add by skt at 2007-9-13不清除将导致内存缓慢增长 pRes = PQexec(m_pConn, "end"); if(pRes != NULL) PQclear(pRes); return pRes != NULL; }
static VOID NTAPI RunTest( IN PVOID Context) { NTSTATUS Status; HANDLE ServerHandle; UNREFERENCED_PARAMETER(Context); ServerHandle = INVALID_HANDLE_VALUE; Status = NpCreatePipe(&ServerHandle, DEVICE_NAMED_PIPE L"\\KmtestNpfsConnectTestPipe", BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, MAX_INSTANCES, IN_QUOTA, OUT_QUOTA); ok_eq_hex(Status, STATUS_SUCCESS); ok(ServerHandle != NULL && ServerHandle != INVALID_HANDLE_VALUE, "ServerHandle = %p\n", ServerHandle); if (!skip(NT_SUCCESS(Status) && ServerHandle != NULL && ServerHandle != INVALID_HANDLE_VALUE, "No pipe\n")) { CheckServer(ServerHandle, FILE_PIPE_LISTENING_STATE); TestConnect(ServerHandle, DEVICE_NAMED_PIPE L"\\KmtestNpfsConnectTestPipe"); } }
int SPostgres::Retrieve(SString sql,SRecordset &rs) { LOGBASEDEBUG("into SPostgres::Retrieve(%s)",sql.data()); sql = sql.replace("\\","\\\\");//postgres数据库SQL中\为转义符 if(m_pConn == NULL) { LOGWARN("m_pConn is NULL is SPostgres::Retrieve, Connect it at first!"); Connect(); if(m_pConn == NULL) { LOGWARN("m_pConn is NULL is SPostgres::Retrieve, Connect error!"); return -1; } } PGresult *pRes = PQexec(m_pConn,sql.data()); if(PQresultStatus(pRes) != PGRES_TUPLES_OK) { if(pRes != NULL) PQclear(pRes); if(TestConnect() == true)//连接可用 return -1; //连接不可用自动重连一次数据库 if(!Reconnect()) return -2;//连接失败 pRes = PQexec(m_pConn,sql.data()); if(PQresultStatus(pRes) != PGRES_TUPLES_OK) { if(pRes != NULL) PQclear(pRes); return -1; } } int cols = PQnfields(pRes); int rows = PQntuples(pRes); int i,j; SRecord *pRecord; //写入记录集 rs.clear(); rs.SetSize(rows,cols); for(i=0;i<cols;i++) { rs.SetColumnName(i,PQfname(pRes,i)); } for(i=0;i<rows;i++) { pRecord = rs.GetRecord(i); for(j=0;j<cols;j++) { pRecord->SetValue(j,PQgetvalue(pRes,i,j)); } } PQclear(pRes); return rows; }
bool SPostgres::ReadLobToFile(SString sTable,SString sLobField,SString sWhere,SString sFile) { LOGBASEDEBUG("Into SPostgres::ReadLobToFile(%s,%s,%s,%s)", sTable.data(),sLobField.data(),sWhere.data(),sFile.data()); SString sql; sql.sprintf("select %s from %s where %s",sLobField.data(),sTable.data(),sWhere.data()); Oid oid = SelectIntoI(sql); if(oid == 0) { LOGERROR("Into SPostgres::ReadLobToFile(%s,%s,%s,%s) get oid error, oid=0", sTable.data(),sLobField.data(),sWhere.data(),sFile.data()); return false; } PGresult *pRes = PQexec(m_pConn, "begin"); if(pRes == NULL) { if(TestConnect() == true)//连接可用 { LOGERROR("Error in SPostgres::ReadLobToFile, exec begin error, err=%s", PQerrorMessage(m_pConn)); return false; } //失败自动重连一次数据库 if(!Reconnect()) { LOGERROR("Error in SPostgres::ReadLobToFile, exec begin error, err=%s", PQerrorMessage(m_pConn)); return false; } pRes = PQexec(m_pConn, "begin"); if(pRes == NULL) { LOGERROR("Error in SPostgres::ReadLobToFile, exec begin error, err=%s", PQerrorMessage(m_pConn)); return false; } } PQclear(pRes); pRes = NULL; if(lo_export(m_pConn,oid,sFile.data()) == 0) { LOGERROR("Error in SPostgres::ReadLobToFile(%s,%s,%s,%s), lo_export error, err:%s", sTable.data(),sLobField.data(),sWhere.data(),sFile.data(),PQerrorMessage(m_pConn)); pRes = PQexec(m_pConn, "end"); if(pRes != NULL) PQclear(pRes); return false; } if(pRes != NULL) PQclear(pRes); pRes = PQexec(m_pConn, "end"); if(pRes != NULL) PQclear(pRes); return pRes != NULL; }
bool SPostgres::Execute(SString sql) { LOGBASEDEBUG("into SPostgres::Execute(%s)",sql.data()); sql = sql.replace("\\","\\\\");//postgres数据库SQL中\为转义符 if(m_pConn == NULL) { LOGWARN("m_pConn is NULL is SPostgres::Execute, Connect it at first!"); Connect(); if(m_pConn == NULL) { LOGWARN("m_pConn is NULL is SPostgres::Execute, Connect error!"); return false; } } PGresult *pRes = PQexec(m_pConn,sql.data()); if(PQresultStatus(pRes) != PGRES_COMMAND_OK ) { SString err; err.sprintf("Error in SPostgres::Execute(%s), err=%s",sql.data(),PQresultErrorMessage(pRes)); LOGERROR("%s",err.data()); if(pRes != NULL) PQclear(pRes); if(TestConnect() == true)//连接可用 return false; //失败自动重连一次数据库 if(!Reconnect()) return false;//连接失败 pRes = PQexec(m_pConn,sql.data()); if(PQresultStatus(pRes)!=PGRES_COMMAND_OK) { LOGERROR("Error in SPostgres::Execute(%s), err=%s",sql.data(),PQresultErrorMessage(pRes)); if(pRes != NULL) PQclear(pRes); return false; } } PQclear(pRes); return true; }