20000528-21:38 GMT+2 Maurilio Longo <maurilio.longo@libero.it>

This commit is contained in:
Maurilio Longo
2000-05-28 19:39:31 +00:00
parent d478f28dbf
commit 4a7c3337a0
3 changed files with 146 additions and 6 deletions

View File

@@ -1,3 +1,10 @@
20000528-21:38 GMT+2 Maurilio Longo <maurilio.longo@libero.it>
* contrib/msql/tmsql.prg
+ added a few methods to TmSQLServer
* contrib/msql/msql.c
* changed to support new methods in tmsql.prg
20000528-17:41 GMT+2 Maurilio Longo <maurilio.longo@libero.it>
* doc/cvs_tips.txt

View File

@@ -179,3 +179,58 @@ HB_FUNC(MSQLGETERR) // char *msqlGetErrMsg(char *);
_retc(msqlGetErrMsg(NULL));
}
HB_FUNC(MSQLLISTDB) // m_result * msqlListDBs(int);
{
int sock = _parnl(1);
m_result *mresult;
m_row mrow;
long nr, i;
ITEM aDBs;
ITEM temp;
mresult = msqlListDBs(sock);
nr = msqlNumRows(mresult);
aDBs = _itemArrayNew(nr);
for (i = 0; i < nr; i++) {
mrow = msqlFetchRow(mresult);
temp = _itemPutC(NULL, mrow[0]);
_itemArrayPut(aDBs, i + 1, temp);
_itemRelease(temp);
}
msqlFreeResult(mresult);
_itemReturn(aDBs);
_itemRelease(aDBs);
}
HB_FUNC(MSQLLISTTA) // m_result * msqlListTables(int);
{
int sock = _parnl(1);
m_result *mresult;
m_row mrow;
long nr, i;
ITEM aTables;
ITEM temp;
mresult = msqlListTables(sock);
nr = msqlNumRows(mresult);
aTables = _itemArrayNew(nr);
for (i = 0; i < nr; i++) {
mrow = msqlFetchRow(mresult);
temp = _itemPutC(NULL, mrow[0]);
_itemArrayPut(aTables, i + 1, temp);
_itemRelease(temp);
}
msqlFreeResult(mresult);
_itemReturn(aTables);
_itemRelease(aTables);
}

View File

@@ -583,11 +583,15 @@ CLASS TmSQLServer
METHOD SelectDB(cDBName) // Which data base I will use for subsequent queries
METHOD CreateTable(cName, aStruct) // Create new table using the same syntax of dbCreate()
METHOD DeleteTable(cName) // delete table
METHOD CreateTable(cTable, aStruct) // Create new table using the same syntax of dbCreate()
METHOD DeleteTable(cTable) // delete table
METHOD TableStruct(cTable) // returns a structure array compatible with clipper's dbStruct() ones
METHOD CreateIndex(cName, cTable, aFNames, lUnique) // Create an index (unique) on field name(s) passed as an array of strings aFNames
METHOD DeleteIndex(cName, cTable) // Delete index cName from cTable
METHOD ListDBs() // returns an array with list of data bases available
METHOD ListTables() // returns an array with list of available tables in current database
METHOD Query(cQuery) // Gets a textual query and returns a TmSQLQuery or TmSQLTable object
METHOD NetErr() INLINE ::lError // Returns .T. if something went wrong
@@ -622,9 +626,9 @@ METHOD SelectDB(cDBName) CLASS TmSQLServer
return .F.
METHOD CreateTable(cName, aStruct) CLASS TmSQLServer
METHOD CreateTable(cTable, aStruct) CLASS TmSQLServer
local cCreateQuery := "CREATE TABLE " + cName + " ("
local cCreateQuery := "CREATE TABLE " + cTable + " ("
local i
for i := 1 to Len(aStruct)
@@ -704,9 +708,9 @@ METHOD DeleteIndex(cName, cTable) CLASS TmSQLServer
return .F.
METHOD DeleteTable(cName) CLASS TmSQLServer
METHOD DeleteTable(cTable) CLASS TmSQLServer
local cDropQuery := "DROP TABLE " + cName
local cDropQuery := "DROP TABLE " + cTable
if msqlQuery(::nSocket, cDropQuery) == 1
return .T.
@@ -756,3 +760,77 @@ METHOD Error() CLASS TmSQLServer
return msqlGetErr()
METHOD ListDBs() CLASS TmSQLServer
local aList
aList := msqlListDB(::nSocket)
return aList
METHOD ListTables() CLASS TmSQLServer
local aList
aList := msqlListTa(::nSocket)
return aList
/* TOFIX: Conversion creates a .dbf with fields of wrong dimension (often) */
METHOD TableStruct(cTable) CLASS TmSQLServer
local nRes, aField, aStruct, aSField, i
aStruct := {}
nRes := msqlListFi(::nSocket, cTable)
if nRes > 0
for i := 1 to msqlNumFie(nRes)
aField := msqlFetchF(nRes)
aSField := Array(DBS_DEC)
// don't count indexes as real fields
if aField[MSQL_FS_TYPE] <= MSQL_LAST_REAL_TYPE
aSField[DBS_NAME] := Left(aField[MSQL_FS_NAME], 10)
aSField[DBS_DEC] := 0
do case
case aField[MSQL_FS_TYPE] == MSQL_INT_TYPE
aSField[DBS_TYPE] := "N"
aSField[DBS_LEN] := 11
case aField[MSQL_FS_TYPE] == MSQL_UINT_TYPE
aSField[DBS_TYPE] := "L"
aSField[DBS_LEN] := 1
case aField[MSQL_FS_TYPE] == MSQL_CHAR_TYPE
aSField[DBS_TYPE] := "C"
aSField[DBS_LEN] := aField[MSQL_FS_LENGTH]
case aField[MSQL_FS_TYPE] == MSQL_DATE_TYPE
aSField[DBS_TYPE] := "D"
aSField[DBS_LEN] := aField[MSQL_FS_LENGTH]
case aField[MSQL_FS_TYPE] == MSQL_REAL_TYPE
aSField[DBS_TYPE] := "N"
aSField[DBS_LEN] := 12
aSFIeld[DBS_DEC] := 8
otherwise
endcase
AAdd(aStruct, aSField)
endif
next
msqlFreeR(nRes)
endif
return aStruct