Files
harbour-core/contrib/hbmysql/diff-en.txt
Przemysław Czerpak 96ca3fe470 2014-01-21 20:41 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* Makefile
  * config/*
  * contrib/*
  * doc/*
  * extras/*
  * include/*
  * lib/*
  * package/*
  * src/*
  * tests/*
  * utils/*
    * removed empty lines left after removed '$' + 'Id' + '$' identifiers
2014-01-21 20:41:05 +01:00

239 lines
8.9 KiB
Plaintext

2004-02
I.Q. David Arturo Macias Corona
Modifications
Class TMySQLRow ---------------------------------------------
- DATA new TMySQLRow:aOriValue
Store originals values of aRow, during creation of TMySQLRow object
Have same function of TMySQLTable:aOldValue
- TMySQLRow:New()
Assign an copy of TMySQLRow:aRow in TMySQLRow:aOriValue
- TMySQLRow:FielPut()
Compare ::aRow[nNum]==NIL in place of Empty(::aRow[nNum])
Empty() can be an null string, value 0, null date, value .F.
- TMySQLRow:FieldPos()
Reduction of code with same functionality for calculate nPos
- TMySQLRow:FieldLen()
Return 0 in place of null string as exception value
- TMySQLRow:FieldDec()
Return 0 in place of null string as exception value
Class TMySQLQuery -------------------------------------------
- DATA new TMySQLQuery:lBof
Change in application of TMySQLQuery:Bof()
- DATA new TMySQLQuery:lEof
Change in application of TMySQLQuery:Eof()
- DATA new TMySQLQuery:lFieldAsData
Is applied for compatibility
Use field names as DATA elements of TMySQLQuery
Field names can match with DATA names in TMySQLQuery or
TMySQLTable, which can substitute values and confuse operations and behaviour
of classes
Using TMySQLQuery:lFieldAsData := .F. can avoid this trouble
- DATA new TMySQLQuery:aRow
Used to store fields values of current row, in
place of fields names as DATA elements of TMySQLQuery
All operations on fields are made using this array of values
- Method TMySQLQuery:Bof()
Change in definition to reproduce Clipper behaviour
Bof() true is applied when is tryed an movement before of first logical record,
and must not be used to indicate record pointer is placed on record 1
Previous definition cause processes like this:
WHILE ! oQuery:Bof()
...
oQuery:SKIP( -1 )
ENDD
do not show record 1
With new definition this behaviour are corrected
- Method TMySQLQuery:Eof()
Change in definition to reproduce Clipper behaviour
Eof() true is applied when is tryed an movement beyond of last logical record,
and must not be used to indicate record pointer is placed on last record
Previous definition cause processes like this:
WHILE ! oQuery:Eof()
...
oQuery:SKIP()
ENDDO
do not show last record
With new definition this behaviour are corrected
With Eof() true, record pointer is placed in LastRec()+1
- TMySQLQuery:New()
Application of TMySQLQuery:lBof, TMySQLQuery:lEof, TMySQLQuery:lFieldAsData,
TMySQLQuery:aRow
- TMySQLQuery:Skip()
Application of TMySQLQuery:lBof, TMySQLQuery:lEof to determinate movements
before of first and beyond of last logical records
Only SKIP movement can set Bof() true
- TMySQLQuery:Skip()
Apply NIL for return. dbSkip() return NIL
- TMySQLQuery:GetRow()
Application of TMySQLQuery:lBof, TMySQLQuery:lEof, TMySQLQuery:lFieldAsData,
TMySQLQuery:aRow
= TMySQLQuery:aRow is used in place of local variable aRow
= Default row is applied to TMySQLQuery:nCurRow, in place to move record pointer
position
= TMySQLQuery:lBof, TMySQLQuery:lEof are determinated
TMySQLQuery:bof(): pointer is placed in row 1
TMySQLQuery:eof(): pointer is placed in TMySQLQuery:lastrec()+1
= In TMySQLQuery:lastrec()+1 phantom record is used with null values in each
field type
- TMySQLQuery:GetRow()
= Correction of error caused for data type in logical and numerics types
= Supresion of messages with Alert() and MsgInfo() which cause halting in batch processes
- TMySQLQuery:FieldPos()
Reduction of code with same functionality for calculate nPos
- TMySQLQuery:FieldGet()
= TMySQLQuery:aRow[nNum] is used in place of DATA variable corresponding to
field name
- TMySQLQuery:FieldLen()
Return 0 in place of null string as exception value
- TMySQLQuery:FieldDec()
Return 0 in place of null string as exception value
Class TMySQLTable -------------------------------------------
- Method TMySQLTable:Update()
= Parameters added:
+ lOldRecord: Use original values of record for locate it
+ lRefresh: refresh query to MySQL server to update information
selected for Client program
- Method TMySQLTable:Delete()
= Parameters added:
+ lOldRecord: Use original values of record for locate it
+ lRefresh: refresh query to MySQL server to update information
selected for Client program
- Method TMySQLTable:Append()
= Parameters added:
+ lRefresh: refresh query to MySQL server to update information
selected for Client program
- Method TMySQLTable:GetBlankRow()
= Parameters added:
+ lSetValues: apply values as if they belong to current row
- New Method TMySQLTable:SetBlankRow()
Apply TMySQLTable:GetBlankRow( .T. ), with true value for lSetValues
- TMySQLTable:Skip()
Apply NIL for return. dbSkip() return NIL
- TMySQLTable:Update(oRow, lOldRecord, lRefresh)
= Application of TMySQLRow:aOriValue, TMySQLTable:aRow
= Application of parameters:
+ lOldRecord, default .F.
In case of lOldRecord application:
* Using current row: Use values of TMySQLQuery:aOldValue
* Using given row: Use values of TMySQLRow:aOriValue
Locating is based in matching of values of ALL fields,
using original values of row
WARNING: If there are more than one row matching in ALL fields, then
all this rows with common values will be changed
This approach is applied to help in row locating when there are not indexes,
or primary key are not enought to determinate record unicity.
But, can not be guaranted record correspondence if there are many equals
This is an alternative to use of TMySQLRow/TMySQLTable:MakePrimaryKeyWhere(), because
this last is based in fields belonging to an primary key
+ lRefresh, default .T.
Refresh query to MySQL server to update information selected for Client program
Is very convenient in case of information changes
= Same record pointer is keep
= For an given row, TMySQLRow:aOriValue is updated with current values of
TMySQLRow:aRow
- TMySQLTable:Delete(oRow, lOldRecord, lRefresh)
= Application of TMySQLRow:aOriValue, TMySQLTable:aRow
= Application of parameters:
+ lOldRecord, default .F.
In case of lOldRecord application:
* Using current row: Use values of TMySQLQuery:aOldValue
* Using given row: Use values of TMySQLRow:aOriValue
Locating is based in matching of values of ALL fields,
using original values of row
WARNING: If there are more than one row matching in ALL fields, then
all this rows with common values will be changed
This approach is applied to help in row locating when there are not indexes,
or primary key are not enought to determinate record unicity.
But, can not be guaranted record correspondence if there are many equals
This is an alternative to use of TMySQLRow/TMySQLTable:MakePrimaryKeyWhere(), because
this last is based in fields belonging to an primary key
+ lRefresh, default .T.
Refresh query to MySQL server to update information selected for Client program
Is very convenient in case of information changes
= Same record pointer is keep
= For an given row, TMySQLRow:aOriValue is updated with current values of
TMySQLRow:aRow
- Metodo TMySQLTable:Append(oRow, lRefresh)
= Application of TMySQLRow:aOriValue, TMySQLTable:aRow
= Application of parameters:
+ lRefresh, default .T.
Refresh query to MySQL server to update information selected for Client program
Is very convenient in case of information changes
= Record pointer is placed in TMySQLTable:lastrec()+1, before query refresh
Observation: even with many tests, I was unable to determinate in which way
set MySQL server position of inserted row. Without indexes, in times
were inserted behind to current pointer, while in other times
were inserted in positions located at 1200 or 1300 rows relative to current pointer,
or at end of table (around 2880 rows)
= For an given row, TMySQLRow:aOriValue is updated with current values of
TMySQLRow:aRow
Too, TMySQLRow:aDirty and TMySQLRow:aOldValue are reseted
- TMySQLTable:GetBlankRow(lSetValues)
= Application of parameters:
+ lSetValues, default .F.
This method give an TMySQLRow object with default values for data type in each field
As created row IS NOT current row of TMySQLTable object,
then must not be modified values of TMySQLTable:aRow and TMySQLTable:aOldValue
In case of need to make this modification, as if empty file is wanted current row of
table, then this parameter can be applied with true value
or with new method TMySQLTable:SetBlankRow()
- TMySQLTable:FielPut()
= Comparar ::aRow[nNum]==NIL en vez de Empty(::aRow[nNum])
Compare ::aRow[nNum]==NIL in place of Empty(::aRow[nNum])
Empty() can be an null string, value 0, empty date, value .F.
= TMySQLTable:aRow[nNum] is applied to store field value
= Based in TMySQLTable:lFieldAsData, is updated DATA element of TMySQLTable
corresponding to field name
- Skipper()
Modification of movement control in order to apply new definitions of
TMySQLQuery:Bof() and TMySQLQuery:Eof()