campo-sirio/servers/odbc/connectf.cpp
guy c4ac448443 Servers
git-svn-id: svn://10.65.10.50/trunk@5855 c028cbd2-c16b-5b4b-a496-9718f37d4682
1998-01-07 10:17:26 +00:00

573 lines
13 KiB
C++
Executable File

#include "StdAfx.h"
#include "connect.h"
#include "server.h"
#include "sqlfile.h"
long TPrassiConnection::OpenFile(int nLogicNum, LPCSTR sWhere)
{
TSqlFile* pSqlFile;
long nHandle = nLogicNum*1000;
for ( ; m_sqlFiles.Lookup(nHandle, pSqlFile); nHandle++);
pSqlFile = new TSqlFile(m_nFirm, nLogicNum, sWhere, Id());
if (pSqlFile->Open() == 0)
m_sqlFiles.SetAt(nHandle, pSqlFile);
else
{
delete pSqlFile;
nHandle = 0;
}
return nHandle;
}
TSqlFile* TPrassiConnection::GetFile(long nHandle)
{
TSqlFile* pSqlFile = NULL;
m_sqlFiles.Lookup(nHandle, pSqlFile);
if (pSqlFile == NULL && nHandle < 1000)
{
int nLogicNum = nHandle;
pSqlFile = new TSqlFile(m_nFirm, nLogicNum, NULL, Id());
if (pSqlFile->Exists())
m_sqlFiles.SetAt(nLogicNum, pSqlFile);
else
{
delete pSqlFile;
pSqlFile = NULL;
}
}
return pSqlFile;
}
BOOL TPrassiConnection::CloseFile(long nHandle)
{
TSqlFile* pSqlFile = GetFile(nHandle);
if (pSqlFile)
{
delete pSqlFile;
m_sqlFiles.RemoveKey(nHandle);
}
return pSqlFile != NULL;
}
BOOL TPrassiConnection::SetFirm(int nFirm)
{
BOOL bOk = m_nFirm == nFirm;
if (!bOk)
{
TPrassiServer& s = GetServer();
bOk = s.TestFirm(nFirm);
if (bOk)
{
long nHandle;
TSqlFile* pSqlFile;
for (POSITION pos = m_sqlFiles.GetStartPosition(); pos; )
{
m_sqlFiles.GetNextAssoc(pos, nHandle, pSqlFile);
pSqlFile->SetFirm(nFirm);
}
}
}
return bOk;
}
///////////////////////////////////////////////////////////
// Jolly2File
static TSqlFile* Jolly2File(TConnection& conn, void *pJolly)
{
TSqlFile* pFile = NULL;
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 1)
{
TPrassiConnection& c = (TPrassiConnection&)conn;
const long n = atol(argv[1]);
pFile = c.GetFile(n);
}
return pFile;
}
static TSqlFile* Jolly2FileInt(TConnection& conn, void *pJolly, int& num)
{
TSqlFile* pFile = NULL;
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 2)
{
pFile = Jolly2File(conn, pJolly);
num = atoi(argv[2]);
}
return pFile;
}
static TSqlFile* Jolly2FileIntInt(TConnection& conn, void *pJolly, int& num, int& flag)
{
TSqlFile* pFile = NULL;
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 3)
{
pFile = Jolly2File(conn, pJolly);
num = atoi(argv[2]);
flag = atoi(argv[3]);
}
return pFile;
}
static TSqlFile* Jolly2FileString(TConnection& conn, void *pJolly, CString& str)
{
TSqlFile* pFile = NULL;
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 2)
{
pFile = Jolly2File(conn, pJolly);
str = argv[2];
}
return pFile;
}
static TSqlFile* Jolly2FileStringInt(TConnection& conn, void *pJolly, CString& str, int& num)
{
TSqlFile* pFile = NULL;
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 3)
{
pFile = Jolly2File(conn, pJolly);
str = argv[2];
num = atoi(argv[3]);
}
return pFile;
}
static TSqlFile* Jolly2FileStringString(TConnection& conn, void *pJolly, CString& str, CString& val)
{
TSqlFile* pFile = NULL;
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 3)
{
pFile = Jolly2File(conn, pJolly);
str = argv[2];
val = argv[3];
}
return pFile;
}
static int Jolly2Int(void *pJolly)
{
const CStringArray& argv = *(CStringArray*)pJolly;
int n = 0;
if (argv.GetSize() > 1)
n = atoi(argv[1]);
return n;
}
static CString Jolly2String(void *pJolly)
{
const CStringArray& argv = *(CStringArray*)pJolly;
CString str;
if (argv.GetSize() > 1)
str = argv[1];
return str;
}
///////////////////////////////////////////////////////////
// int FileClearFields(int nHandle)
BOOL f_FileClearFields(TConnection& conn, void* pJolly)
{
TSqlFile* pFile = Jolly2File(conn, pJolly);
if (pFile)
return conn.ReturnInteger(pFile->ClearFields());
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileClose(int nHandle)
BOOL f_FileClose(TConnection& conn, void* pJolly)
{
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 1)
{
TPrassiConnection& c = (TPrassiConnection&)conn;
long nHandle = atol(argv[1]);
TSqlFile* pFile = c.GetFile(nHandle);
if (pFile)
{
int err = pFile->Close();
if (err == 0)
c.CloseFile(nHandle);
return conn.ReturnInteger(err);
}
}
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileFirst(int nHandle)
int f_FileFirst(TConnection& conn, void* pJolly)
{
int nLocks;
TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nLocks);
if (pFile)
return conn.ReturnInteger(pFile->First(nLocks));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileGetField(int nHandle, CString strName)
BOOL f_FileGetField(TConnection& conn, void* pJolly)
{
CString strName;
TSqlFile* pFile = Jolly2FileString(conn, pJolly, strName);
if (pFile)
{
const char* str = pFile->GetField(strName);
if (str)
return conn.ReturnString(str);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// CString FileGetFieldInfo(int nLogicNum, int nIndex)
BOOL f_FileGetFieldInfo(TConnection& conn, void* pJolly)
{
int nIndex;
TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nIndex);
if (pFile)
{
CString strInfo = pFile->GetFieldInfo(nIndex);
return conn.ReturnString(strInfo);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileGetItems(long nHandle)
BOOL f_FileGetItems(TConnection& conn, void* pJolly)
{
TSqlFile* pFile = Jolly2File(conn, pJolly);
if (pFile)
{
int items = pFile->GetRecordCount();
if (items >= 0)
return conn.ReturnInteger(items);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileGetKey(int nHandle)
BOOL f_FileGetKey(TConnection& conn, void* pJolly)
{
TSqlFile* pFile = Jolly2File(conn, pJolly);
if (pFile)
{
int key = pFile->GetKey();
if (key > 0)
return conn.ReturnInteger(key);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// CString FileGetKeyExpr(int nLogicNum)
BOOL f_FileGetKeyExpr(TConnection& conn, void* pJolly)
{
int key;
TSqlFile* pFile = Jolly2FileInt(conn, pJolly, key);
if (pFile)
return conn.ReturnString(pFile->GetKeyExpr(key));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileGetPosition(int nHandle)
BOOL f_FileGetPosition(TConnection& conn, void* pJolly)
{
TSqlFile* pFile = Jolly2File(conn, pJolly);
if (pFile)
return conn.ReturnInteger(pFile->GetPosition());
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileLast(int nHandle, int nLock)
BOOL f_FileLast(TConnection& conn, void* pJolly)
{
int nLocks;
TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nLocks);
if (pFile)
return conn.ReturnInteger(pFile->Last(nLocks));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileLock(int nHandle)
BOOL f_FileLock(TConnection& conn, void* pJolly)
{
TSqlFile* pFile = Jolly2File(conn, pJolly);
if (pFile)
return conn.ReturnInteger(pFile->ExclusiveLock());
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileMove(int nHandle, int pos)
BOOL f_FileMove(TConnection& conn, void* pJolly)
{
int nPos, nLocks;
TSqlFile* pFile = Jolly2FileIntInt(conn, pJolly, nPos, nLocks);
if (pFile)
return conn.ReturnInteger(pFile->Move(nPos, nLocks));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileNext(int nHandle)
BOOL f_FileNext(TConnection& conn, void* pJolly)
{
int nLocks;
TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nLocks);
if (pFile)
return conn.ReturnInteger(pFile->Next(nLocks));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileOpen(int nLogicNum)
BOOL f_FileOpen(TConnection& conn, void* pJolly)
{
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 1)
{
TPrassiConnection& c = (TPrassiConnection&)conn;
int nLogicNum = atoi(argv[1]);
LPCSTR sWhere = NULL;
if (argv.GetSize() > 2)
sWhere = argv[2];
long nHandle = c.OpenFile(nLogicNum, sWhere);
if (nHandle)
return c.ReturnInteger(nHandle);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileOpenTable(const char* str)
BOOL f_FileOpenTable(TConnection& conn, void* pJolly)
{
const CStringArray& argv = *(CStringArray*)pJolly;
if (argv.GetSize() > 1)
{
TPrassiConnection& c = (TPrassiConnection&)conn;
const char* tab = argv[1];
int nLogicNum = 5;
if (!isalnum(*tab))
{
nLogicNum--;
tab++;
}
CString strWhere;
strWhere.Format("COD='%s'", tab);
if (argv.GetSize() > 2)
{
strWhere += " AND ";
strWhere += argv[2];
}
long nHandle = c.OpenFile(nLogicNum, strWhere);
if (nHandle)
return c.ReturnInteger(nHandle);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// int FilePrev(int nHandle)
BOOL f_FilePrev(TConnection& conn, void* pJolly)
{
int nLocks;
TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nLocks);
if (pFile)
return conn.ReturnInteger(pFile->Prev(nLocks));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileRead(int nHandle, CString where, int flags)
BOOL f_FileRead(TConnection& conn, void* pJolly)
{
CString fields;
int flags;
TSqlFile* pFile = Jolly2FileStringInt(conn, pJolly, fields, flags);
if (pFile)
return conn.ReturnInteger(pFile->Read(fields, flags));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileRemove(int nHandle, CString key)
BOOL f_FileRemove(TConnection& conn, void* pJolly)
{
CString key;
TSqlFile* pFile = Jolly2FileString(conn, pJolly, key);
if (pFile)
return conn.ReturnInteger(pFile->Remove(key));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileRewrite(int nHandle, CString key)
BOOL f_FileRewrite(TConnection& conn, void* pJolly)
{
CString key;
TSqlFile* pFile = Jolly2FileString(conn, pJolly, key);
if (pFile)
return conn.ReturnInteger(pFile->Rewrite(key));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileSetField(int nHandle, int field, CString value)
// int FileSetField(int nHandle, CString field, CString value)
BOOL f_FileSetField(TConnection& conn, void* pJolly)
{
CString strField;
CString strValue;
TSqlFile* pFile = Jolly2FileStringString(conn, pJolly,
strField, strValue);
if (pFile)
{
const int nIndex = atoi(strField);
int err;
if (nIndex > 0)
err = pFile->SetField(nIndex, strValue);
else
err = pFile->SetField(strField, strValue);
return conn.ReturnInteger(err);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileSetKey(int nHandle, int key)
BOOL f_FileSetKey(TConnection& conn, void* pJolly)
{
int key;
TSqlFile* pFile = Jolly2FileInt(conn, pJolly, key);
if (pFile)
{
int nErr = pFile->SetKey(key);
return conn.ReturnInteger(nErr);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileSkip(int nHandle, int pos)
BOOL f_FileSkip(TConnection& conn, void* pJolly)
{
int nPos, nLocks;
TSqlFile* pFile = Jolly2FileIntInt(conn, pJolly, nPos, nLocks);
if (pFile)
return conn.ReturnInteger(pFile->Skip(nPos, nLocks));
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileUnlock(int nHandle)
BOOL f_FileUnlock(TConnection& conn, void* pJolly)
{
TSqlFile* pFile = Jolly2File(conn, pJolly);
if (pFile)
return conn.ReturnInteger(pFile->ExclusiveUnlock());
return FALSE;
}
///////////////////////////////////////////////////////////
// int FileWrite(int nHandle)
BOOL f_FileWrite(TConnection& conn, void* pJolly)
{
TSqlFile* pFile = Jolly2File(conn, pJolly);
if (pFile)
return conn.ReturnInteger(pFile->Write());
return FALSE;
}
///////////////////////////////////////////////////////////
// int FirmGet()
BOOL f_FirmGet(TConnection& conn, void* pJolly)
{
TPrassiConnection& c = (TPrassiConnection&)conn;
return c.ReturnInteger(c.GetFirm());
}
///////////////////////////////////////////////////////////
// int FirmSet()
BOOL f_FirmSet(TConnection& conn, void* pJolly)
{
int nFirm = Jolly2Int(pJolly);
TPrassiConnection& c = (TPrassiConnection&)conn;
return c.ReturnBool(c.SetFirm(nFirm));
}
///////////////////////////////////////////////////////////
// int FirmTest()
BOOL f_FirmTest(TConnection& conn, void* pJolly)
{
int nFirm = Jolly2Int(pJolly);
TPrassiServer& s = GetServer();
return conn.ReturnBool(s.TestFirm(nFirm));
}
///////////////////////////////////////////////////////////
// void* FtpGetFile(CString)
BOOL f_FtpGetFile(TConnection& conn, void* pJolly)
{
CString filename;
filename = Jolly2String(pJolly);
FILE* f = fopen(filename, "rb");
if (f != NULL)
{
fseek(f, 0, SEEK_END);
DWORD dwSize = ftell(f);
BYTE* pData = conn.Server().GetBuffer(dwSize);
fseek(f, 0, SEEK_SET);
size_t r = fread(pData, dwSize, 1, f);
fclose(f);
}
return f != NULL;
}