示例#1
0
//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;
}
示例#2
0
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");
    }
}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
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;
}