2010-05-03 10:11 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbmysql/mysql.ch
* contrib/hbmysql/tmysql.prg
* Synced type constant names with MYSQL.
Kept old names for compatibility, guarded with HB_LEGACY_LEVEL3.
* contrib/hbmysql/tmysql.prg
% Minor optimizations.
! TMySQLRow:MakePrimaryKeyWhere() and TMySQLTable:MakePrimaryKeyWhere()
fixed to not create wrong SQL expression when no primary key
is present.
; TOFIX: Handle this case properly in callers of these methods.
This commit is contained in:
@@ -17,6 +17,19 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2010-05-03 10:11 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbmysql/mysql.ch
|
||||
* contrib/hbmysql/tmysql.prg
|
||||
* Synced type constant names with MYSQL.
|
||||
Kept old names for compatibility, guarded with HB_LEGACY_LEVEL3.
|
||||
|
||||
* contrib/hbmysql/tmysql.prg
|
||||
% Minor optimizations.
|
||||
! TMySQLRow:MakePrimaryKeyWhere() and TMySQLTable:MakePrimaryKeyWhere()
|
||||
fixed to not create wrong SQL expression when no primary key
|
||||
is present.
|
||||
; TOFIX: Handle this case properly in callers of these methods.
|
||||
|
||||
2010-05-03 00:38 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
* contrib/hbxbp/xbptoolbar.prg
|
||||
! Issued: setWindowaTitle() for main menubar.
|
||||
@@ -34,16 +47,16 @@
|
||||
* contrib/hbide/ideshortcuts.prg
|
||||
+ Implemented: almost all the docks can be placed on any of the areas.
|
||||
Exception is "Output Console" which is only dockable to top or bottom.
|
||||
+ Main toolbar and statusbar featured to toggle. Statusbar, however is
|
||||
session dependant, i.e., is not saved for next run.
|
||||
+ Main toolbar and statusbar featured to toggle. Statusbar, however is
|
||||
session dependant, i.e., is not saved for next run.
|
||||
! Many artifacts fixed for Search/Replace engine, all the three variants.
|
||||
! "Exppression" edit fixed to respect "Enter" key press to start searching.
|
||||
! More artifacts I must be forgetting.
|
||||
|
||||
|
||||
2010-05-02 18:11 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
|
||||
% Fixed to honor right-to-left selection.
|
||||
Now text can be selected in either directions with
|
||||
Now text can be selected in either directions with
|
||||
keyboard and mouse, both.
|
||||
|
||||
2010-05-02 16:29 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
@@ -53,7 +66,7 @@
|
||||
2010-05-02 16:12 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
|
||||
+ Implemented: horizontally scrolled text to be copied.
|
||||
So now it is identical to xMate in all respects plus
|
||||
So now it is identical to xMate in all respects plus
|
||||
selection through mouse as properitory to hbIDE.
|
||||
|
||||
2010-05-02 15:00 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
@@ -64,7 +77,7 @@
|
||||
|
||||
+ Implemented: much-awaited and extremely-required feature - block copy/paste.
|
||||
This implementation closely follows xMate's footsteps and is highly optimized,
|
||||
having maximum tasks carried through .prg code. Probably this opens up
|
||||
having maximum tasks carried through .prg code. Probably this opens up
|
||||
hbIDE to wider audience. This has been the most difficult feature so far,
|
||||
and has consumed an entire week with intensive schedule.
|
||||
|
||||
@@ -79,7 +92,7 @@
|
||||
Mouse : Mouse-move while left-button pressed ( Only available for visible text ).
|
||||
Copy : Ctrl+C ( text is also available on the clip-board )
|
||||
Paste : Ctrl+V ( text only copied through Ctrl+C while in "Column Selection" mode ).
|
||||
Inserts : Position cursor at first line and column,
|
||||
Inserts : Position cursor at first line and column,
|
||||
Press Shift+Down arraow upto some ending row,
|
||||
A thin-vertical-line should appear follwoing your cursor path,
|
||||
Start typing any characters,
|
||||
@@ -90,10 +103,10 @@
|
||||
Deletes : Select the text with Shift+Navigation Keys,
|
||||
Press "Del".
|
||||
|
||||
It is highly possible that some of the artifacts may have gone not exactly like
|
||||
It is highly possible that some of the artifacts may have gone not exactly like
|
||||
xMate, so please report back. Also note that selections left-to-right are known
|
||||
for accuracy, right-to-left may not produce accurate results. Other thing to
|
||||
note is that horizontal scrolling has not been possible, so if your text goes
|
||||
for accuracy, right-to-left may not produce accurate results. Other thing to
|
||||
note is that horizontal scrolling has not been possible, so if your text goes
|
||||
beyond right-edge of the window and you have a need to copy it, then first zoom-in
|
||||
to brought it into viewport, then start selection process. Vertical length does
|
||||
not matter. However with mouse you can only select a window-full of text.
|
||||
|
||||
@@ -52,56 +52,87 @@
|
||||
*/
|
||||
|
||||
/* MySQL field types */
|
||||
#define MYSQL_TINY_TYPE 1 /* NOTE: TINY is used to map clipper logical values to MySQL tables, so 0 == .F., 1 == .T. */
|
||||
#define MYSQL_SHORT_TYPE 2
|
||||
#define MYSQL_LONG_TYPE 3
|
||||
#define MYSQL_FLOAT_TYPE 4
|
||||
#define MYSQL_DOUBLE_TYPE 5
|
||||
#define MYSQL_NULL_TYPE 6
|
||||
#define MYSQL_TIMESTAMP_TYPE 7
|
||||
#define MYSQL_LONGLONG_TYPE 8
|
||||
#define MYSQL_INT24_TYPE 9
|
||||
#define MYSQL_DATE_TYPE 10
|
||||
#define MYSQL_TIME_TYPE 11
|
||||
#define MYSQL_DATETIME_TYPE 12
|
||||
#define MYSQL_YEAR_TYPE 13
|
||||
#define MYSQL_NEWDATE_TYPE 14
|
||||
#define MYSQL_DECIMAL_TYPE 246
|
||||
#define MYSQL_ENUMTYPE 247
|
||||
#define MYSQL_SET_TYPE 248
|
||||
#define MYSQL_TINY_BLOB_TYPE 249
|
||||
#define MYSQL_MEDIUM_BLOB_TYPE 250
|
||||
#define MYSQL_LONG_BLOB_TYPE 251
|
||||
#define MYSQL_BLOB_TYPE 252
|
||||
#define MYSQL_VAR_STRING_TYPE 253
|
||||
#define MYSQL_STRING_TYPE 254
|
||||
#define MYSQL_TYPE_DECIMAL 0
|
||||
#define MYSQL_TYPE_TINY 1 /* NOTE: TINY is used to map clipper logical values to MySQL tables, so 0 == .F., 1 == .T. */
|
||||
#define MYSQL_TYPE_SHORT 2
|
||||
#define MYSQL_TYPE_LONG 3
|
||||
#define MYSQL_TYPE_FLOAT 4
|
||||
#define MYSQL_TYPE_DOUBLE 5
|
||||
#define MYSQL_TYPE_NULL 6
|
||||
#define MYSQL_TYPE_TIMESTAMP 7
|
||||
#define MYSQL_TYPE_LONGLONG 8
|
||||
#define MYSQL_TYPE_INT24 9
|
||||
#define MYSQL_TYPE_DATE 10
|
||||
#define MYSQL_TYPE_TIME 11
|
||||
#define MYSQL_TYPE_DATETIME 12
|
||||
#define MYSQL_TYPE_YEAR 13
|
||||
#define MYSQL_TYPE_NEWDATE 14
|
||||
#define MYSQL_TYPE_VARCHAR 15
|
||||
#define MYSQL_TYPE_BIT 16
|
||||
#define MYSQL_TYPE_NEWDECIMAL 246
|
||||
#define MYSQL_TYPE_ENUM 247
|
||||
#define MYSQL_TYPE_SET 248
|
||||
#define MYSQL_TYPE_TINY_BLOB 249
|
||||
#define MYSQL_TYPE_MEDIUM_BLOB 250
|
||||
#define MYSQL_TYPE_LONG_BLOB 251
|
||||
#define MYSQL_TYPE_BLOB 252
|
||||
#define MYSQL_TYPE_VAR_STRING 253
|
||||
#define MYSQL_TYPE_STRING 254
|
||||
#define MYSQL_TYPE_GEOMETRY 255
|
||||
|
||||
/* MySQL field structure item number
|
||||
(C level structure is translated to a clipper array) */
|
||||
#define MYSQL_FS_NAME 1 /* Name of column */
|
||||
#define MYSQL_FS_TABLE 2 /* Table of column if column was a field */
|
||||
#define MYSQL_FS_DEF 3 /* Default value (set by mysql_list_fields) */
|
||||
#define MYSQL_FS_TYPE 4 /* Type of field. Se mysql_com.h for types */
|
||||
#define MYSQL_FS_LENGTH 5 /* Width of column */
|
||||
#define MYSQL_FS_MAXLEN 6 /* Max width of selected set */
|
||||
#define MYSQL_FS_FLAGS 7 /* Div flags */
|
||||
#define MYSQL_FS_DECIMALS 8 /* Number of decimals in field */
|
||||
#define MYSQL_FS_NAME 1 /* Name of column */
|
||||
#define MYSQL_FS_TABLE 2 /* Table of column if column was a field */
|
||||
#define MYSQL_FS_DEF 3 /* Default value (set by mysql_list_fields) */
|
||||
#define MYSQL_FS_TYPE 4 /* Type of field. Se mysql_com.h for types */
|
||||
#define MYSQL_FS_LENGTH 5 /* Width of column */
|
||||
#define MYSQL_FS_MAXLEN 6 /* Max width of selected set */
|
||||
#define MYSQL_FS_FLAGS 7 /* Div flags */
|
||||
#define MYSQL_FS_DECIMALS 8 /* Number of decimals in field */
|
||||
|
||||
/* MySQL field flags */
|
||||
#define NOT_NULL_FLAG 1 /* Field can't be NULL */
|
||||
#define PRI_KEY_FLAG 2 /* Field is part of a primary key */
|
||||
#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */
|
||||
#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */
|
||||
#define BLOB_FLAG 16 /* Field is a blob */
|
||||
#define UNSIGNED_FLAG 32 /* Field is unsigned */
|
||||
#define ZEROFILL_FLAG 64 /* Field is zerofill */
|
||||
#define BINARY_FLAG 128
|
||||
#define NOT_NULL_FLAG 1 /* Field can't be NULL */
|
||||
#define PRI_KEY_FLAG 2 /* Field is part of a primary key */
|
||||
#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */
|
||||
#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */
|
||||
#define BLOB_FLAG 16 /* Field is a blob */
|
||||
#define UNSIGNED_FLAG 32 /* Field is unsigned */
|
||||
#define ZEROFILL_FLAG 64 /* Field is zerofill */
|
||||
#define BINARY_FLAG 128
|
||||
/* The following are only sent to new clients */
|
||||
#define ENUM_FLAG 256 /* field is an enum */
|
||||
#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */
|
||||
#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
|
||||
#define PART_KEY_FLAG 16384 /* Intern; Part of some key */
|
||||
#define GROUP_FLAG 32768 /* Intern group field */
|
||||
#define ENUM_FLAG 256 /* field is an enum */
|
||||
#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */
|
||||
#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
|
||||
#define PART_KEY_FLAG 16384 /* Intern; Part of some key */
|
||||
#define GROUP_FLAG 32768 /* Intern group field */
|
||||
|
||||
/* Extension to DBS_xxx defines to encompass NOT NULL fields, needed by indexes */
|
||||
#define DBS_NOTNULL 5 /* True if field has to be NOT NULL */
|
||||
#define DBS_NOTNULL 5 /* True if field has to be NOT NULL */
|
||||
|
||||
#if defined( HB_LEGACY_LEVEL3 )
|
||||
/* MySQL field types (for compatibility with older Harbour versions) */
|
||||
#define MYSQL_TINY_TYPE MYSQL_TYPE_TINY
|
||||
#define MYSQL_SHORT_TYPE MYSQL_TYPE_SHORT
|
||||
#define MYSQL_LONG_TYPE MYSQL_TYPE_LONG
|
||||
#define MYSQL_FLOAT_TYPE MYSQL_TYPE_FLOAT
|
||||
#define MYSQL_DOUBLE_TYPE MYSQL_TYPE_DOUBLE
|
||||
#define MYSQL_NULL_TYPE MYSQL_TYPE_NULL
|
||||
#define MYSQL_TIMESTAMP_TYPE MYSQL_TYPE_TIMESTAMP
|
||||
#define MYSQL_LONGLONG_TYPE MYSQL_TYPE_LONGLONG
|
||||
#define MYSQL_INT24_TYPE MYSQL_TYPE_INT24
|
||||
#define MYSQL_DATE_TYPE MYSQL_TYPE_DATE
|
||||
#define MYSQL_TIME_TYPE MYSQL_TYPE_TIME
|
||||
#define MYSQL_DATETIME_TYPE MYSQL_TYPE_DATETIME
|
||||
#define MYSQL_YEAR_TYPE MYSQL_TYPE_YEAR
|
||||
#define MYSQL_NEWDATE_TYPE MYSQL_TYPE_NEWDATE
|
||||
#define MYSQL_DECIMAL_TYPE MYSQL_TYPE_NEWDECIMAL
|
||||
#define MYSQL_ENUMTYPE MYSQL_TYPE_ENUM
|
||||
#define MYSQL_SET_TYPE MYSQL_TYPE_SET
|
||||
#define MYSQL_TINY_BLOB_TYPE MYSQL_TYPE_TINY_BLOB
|
||||
#define MYSQL_MEDIUM_BLOB_TYPE MYSQL_TYPE_MEDIUM_BLOB
|
||||
#define MYSQL_LONG_BLOB_TYPE MYSQL_TYPE_LONG_BLOB
|
||||
#define MYSQL_BLOB_TYPE MYSQL_TYPE_BLOB
|
||||
#define MYSQL_VAR_STRING_TYPE MYSQL_TYPE_VAR_STRING
|
||||
#define MYSQL_STRING_TYPE MYSQL_TYPE_STRING
|
||||
#endif
|
||||
|
||||
@@ -181,8 +181,8 @@ METHOD FieldDec( nNum, lFormat ) CLASS TMySQLRow
|
||||
|
||||
IF nNum >= 1 .AND. nNum <= Len( ::aFieldStruct )
|
||||
|
||||
IF !lFormat .AND. ( ::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ] == MYSQL_FLOAT_TYPE .OR. ;
|
||||
::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ] == MYSQL_DOUBLE_TYPE )
|
||||
IF !lFormat .AND. ( ::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ] == MYSQL_TYPE_FLOAT .OR. ;
|
||||
::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ] == MYSQL_TYPE_DOUBLE )
|
||||
RETURN Set( _SET_DECIMALS )
|
||||
ELSE
|
||||
RETURN ::aFieldStruct[ nNum ][ MYSQL_FS_DECIMALS ]
|
||||
@@ -197,28 +197,28 @@ METHOD FieldType( nNum ) CLASS TMySQLRow
|
||||
IF nNum >= 1 .AND. nNum <= Len( ::aFieldStruct )
|
||||
|
||||
SWITCH ::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ]
|
||||
CASE MYSQL_TINY_TYPE
|
||||
CASE MYSQL_TYPE_TINY
|
||||
RETURN "L"
|
||||
|
||||
CASE MYSQL_SHORT_TYPE
|
||||
CASE MYSQL_LONG_TYPE
|
||||
CASE MYSQL_LONGLONG_TYPE
|
||||
CASE MYSQL_FLOAT_TYPE
|
||||
CASE MYSQL_DOUBLE_TYPE
|
||||
CASE MYSQL_DECIMAL_TYPE
|
||||
CASE MYSQL_INT24_TYPE
|
||||
CASE MYSQL_TYPE_SHORT
|
||||
CASE MYSQL_TYPE_LONG
|
||||
CASE MYSQL_TYPE_LONGLONG
|
||||
CASE MYSQL_TYPE_FLOAT
|
||||
CASE MYSQL_TYPE_DOUBLE
|
||||
CASE MYSQL_TYPE_NEWDECIMAL
|
||||
CASE MYSQL_TYPE_INT24
|
||||
RETURN "N"
|
||||
|
||||
CASE MYSQL_VAR_STRING_TYPE
|
||||
CASE MYSQL_STRING_TYPE
|
||||
CASE MYSQL_DATETIME_TYPE
|
||||
CASE MYSQL_TYPE_VAR_STRING
|
||||
CASE MYSQL_TYPE_STRING
|
||||
CASE MYSQL_TYPE_DATETIME
|
||||
RETURN "C"
|
||||
|
||||
CASE MYSQL_DATE_TYPE
|
||||
CASE MYSQL_TYPE_DATE
|
||||
RETURN "D"
|
||||
|
||||
CASE MYSQL_BLOB_TYPE
|
||||
CASE MYSQL_MEDIUM_BLOB_TYPE
|
||||
CASE MYSQL_TYPE_BLOB
|
||||
CASE MYSQL_TYPE_MEDIUM_BLOB
|
||||
RETURN "M"
|
||||
|
||||
ENDSWITCH
|
||||
@@ -230,7 +230,7 @@ METHOD FieldType( nNum ) CLASS TMySQLRow
|
||||
// returns a WHERE x=y statement which uses primary key (if available)
|
||||
METHOD MakePrimaryKeyWhere() CLASS TMySQLRow
|
||||
|
||||
LOCAL ni, cWhere := " WHERE "
|
||||
LOCAL ni, cWhere := ""
|
||||
|
||||
FOR nI := 1 TO Len( ::aFieldStruct )
|
||||
|
||||
@@ -238,6 +238,10 @@ METHOD MakePrimaryKeyWhere() CLASS TMySQLRow
|
||||
IF hb_bitAnd( ::aFieldStruct[ nI ][ MYSQL_FS_FLAGS ], PRI_KEY_FLAG ) == PRI_KEY_FLAG .OR. ;
|
||||
hb_bitAnd( ::aFieldStruct[ nI ][ MYSQL_FS_FLAGS ], MULTIPLE_KEY_FLAG ) == MULTIPLE_KEY_FLAG
|
||||
|
||||
IF ! Empty( cWhere )
|
||||
cWhere += " AND "
|
||||
ENDIF
|
||||
|
||||
cWhere += ::aFieldStruct[ nI ][ MYSQL_FS_NAME ] + "="
|
||||
|
||||
// if a part of a primary key has been changed, use original value
|
||||
@@ -246,14 +250,13 @@ METHOD MakePrimaryKeyWhere() CLASS TMySQLRow
|
||||
ELSE
|
||||
cWhere += ClipValue2SQL( ::aRow[ nI ] )
|
||||
ENDIF
|
||||
|
||||
cWhere += " AND "
|
||||
ENDIF
|
||||
|
||||
NEXT
|
||||
|
||||
// remove last " AND "
|
||||
cWhere := Left( cWhere, Len( cWhere ) - 5 )
|
||||
IF ! Empty( cWhere )
|
||||
cWhere := " WHERE " + cWhere
|
||||
ENDIF
|
||||
|
||||
RETURN cWhere
|
||||
|
||||
@@ -508,7 +511,7 @@ METHOD GetRow( nRow ) CLASS TMySQLQuery
|
||||
FOR i := 1 TO ::nNumFields
|
||||
|
||||
SWITCH ::aFieldStruct[ i ][ MYSQL_FS_TYPE ]
|
||||
CASE MYSQL_TINY_TYPE
|
||||
CASE MYSQL_TYPE_TINY
|
||||
//DAVID:
|
||||
IF ::aRow[ i ] == NIL
|
||||
::aRow[ i ] := "0"
|
||||
@@ -516,11 +519,11 @@ METHOD GetRow( nRow ) CLASS TMySQLQuery
|
||||
::aRow[ i ] := Val( ::aRow[ i ] ) != 0
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_SHORT_TYPE
|
||||
CASE MYSQL_LONG_TYPE
|
||||
CASE MYSQL_LONGLONG_TYPE
|
||||
CASE MYSQL_INT24_TYPE
|
||||
CASE MYSQL_DECIMAL_TYPE
|
||||
CASE MYSQL_TYPE_SHORT
|
||||
CASE MYSQL_TYPE_LONG
|
||||
CASE MYSQL_TYPE_LONGLONG
|
||||
CASE MYSQL_TYPE_INT24
|
||||
CASE MYSQL_TYPE_NEWDECIMAL
|
||||
//DAVID:
|
||||
IF ::aRow[ i ] == NIL
|
||||
::aRow[ i ] := "0"
|
||||
@@ -528,8 +531,8 @@ METHOD GetRow( nRow ) CLASS TMySQLQuery
|
||||
::aRow[ i ] := Val( ::aRow[ i ] )
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_DOUBLE_TYPE
|
||||
CASE MYSQL_FLOAT_TYPE
|
||||
CASE MYSQL_TYPE_DOUBLE
|
||||
CASE MYSQL_TYPE_FLOAT
|
||||
//DAVID:
|
||||
IF ::aRow[ i ] == NIL
|
||||
::aRow[ i ] := "0"
|
||||
@@ -537,7 +540,7 @@ METHOD GetRow( nRow ) CLASS TMySQLQuery
|
||||
::aRow[ i ] := Val( ::aRow[ i ] )
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_DATE_TYPE
|
||||
CASE MYSQL_TYPE_DATE
|
||||
IF Empty( ::aRow[ i ] )
|
||||
::aRow[ i ] := hb_SToD( "" )
|
||||
ELSE
|
||||
@@ -546,16 +549,16 @@ METHOD GetRow( nRow ) CLASS TMySQLQuery
|
||||
ENDIF
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_BLOB_TYPE
|
||||
CASE MYSQL_TYPE_BLOB
|
||||
// Memo field
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_STRING_TYPE
|
||||
CASE MYSQL_VAR_STRING_TYPE
|
||||
CASE MYSQL_TYPE_STRING
|
||||
CASE MYSQL_TYPE_VAR_STRING
|
||||
// char field
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_DATETIME_TYPE
|
||||
CASE MYSQL_TYPE_DATETIME
|
||||
// DateTime field
|
||||
EXIT
|
||||
|
||||
@@ -681,8 +684,8 @@ METHOD FieldDec( nNum, lFormat ) CLASS TMySQLQuery
|
||||
DEFAULT lFormat TO .F.
|
||||
|
||||
IF nNum >=1 .AND. nNum <= Len( ::aFieldStruct )
|
||||
IF !lFormat .AND. ( ::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ] == MYSQL_FLOAT_TYPE .OR. ;
|
||||
::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ] == MYSQL_DOUBLE_TYPE )
|
||||
IF !lFormat .AND. ( ::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ] == MYSQL_TYPE_FLOAT .OR. ;
|
||||
::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ] == MYSQL_TYPE_DOUBLE )
|
||||
RETURN Set( _SET_DECIMALS )
|
||||
ELSE
|
||||
RETURN ::aFieldStruct[ nNum ][ MYSQL_FS_DECIMALS ]
|
||||
@@ -697,28 +700,28 @@ METHOD FieldType( nNum ) CLASS TMySQLQuery
|
||||
IF nNum >= 1 .AND. nNum <= Len( ::aFieldStruct )
|
||||
|
||||
SWITCH ::aFieldStruct[ nNum ][ MYSQL_FS_TYPE ]
|
||||
CASE MYSQL_TINY_TYPE
|
||||
CASE MYSQL_TYPE_TINY
|
||||
RETURN "L"
|
||||
|
||||
CASE MYSQL_SHORT_TYPE
|
||||
CASE MYSQL_LONG_TYPE
|
||||
CASE MYSQL_LONGLONG_TYPE
|
||||
CASE MYSQL_FLOAT_TYPE
|
||||
CASE MYSQL_DOUBLE_TYPE
|
||||
CASE MYSQL_DECIMAL_TYPE
|
||||
CASE MYSQL_INT24_TYPE
|
||||
CASE MYSQL_TYPE_SHORT
|
||||
CASE MYSQL_TYPE_LONG
|
||||
CASE MYSQL_TYPE_LONGLONG
|
||||
CASE MYSQL_TYPE_FLOAT
|
||||
CASE MYSQL_TYPE_DOUBLE
|
||||
CASE MYSQL_TYPE_NEWDECIMAL
|
||||
CASE MYSQL_TYPE_INT24
|
||||
RETURN "N"
|
||||
|
||||
CASE MYSQL_VAR_STRING_TYPE
|
||||
CASE MYSQL_STRING_TYPE
|
||||
CASE MYSQL_DATETIME_TYPE
|
||||
CASE MYSQL_TYPE_VAR_STRING
|
||||
CASE MYSQL_TYPE_STRING
|
||||
CASE MYSQL_TYPE_DATETIME
|
||||
RETURN "C"
|
||||
|
||||
CASE MYSQL_DATE_TYPE
|
||||
CASE MYSQL_TYPE_DATE
|
||||
RETURN "D"
|
||||
|
||||
CASE MYSQL_BLOB_TYPE
|
||||
CASE MYSQL_MEDIUM_BLOB_TYPE
|
||||
CASE MYSQL_TYPE_BLOB
|
||||
CASE MYSQL_TYPE_MEDIUM_BLOB
|
||||
RETURN "M"
|
||||
|
||||
ENDSWITCH
|
||||
@@ -824,7 +827,6 @@ METHOD Update( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable
|
||||
IF oRow == NIL // default Current row
|
||||
|
||||
FOR i := 1 TO ::nNumFields
|
||||
|
||||
IF !( ::aOldValue[ i ] == ::FieldGet( i ) )
|
||||
cUpdateQuery += ::aFieldStruct[ i ][ MYSQL_FS_NAME ] + "=" + ClipValue2SQL( ::FieldGet( i ) ) + ","
|
||||
ENDIF
|
||||
@@ -844,10 +846,7 @@ METHOD Update( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable
|
||||
// WARNING: if there are more than one record of ALL fields matching, all of those records will be changed
|
||||
|
||||
FOR nI := 1 TO Len( ::aFieldStruct )
|
||||
cWhere += ::aFieldStruct[ nI ][ MYSQL_FS_NAME ] + "="
|
||||
// use original value
|
||||
cWhere += ClipValue2SQL( ::aOldValue[ nI ] )
|
||||
cWhere += " AND "
|
||||
cWhere += ::aFieldStruct[ nI ][ MYSQL_FS_NAME ] + "=" + ClipValue2SQL( ::aOldValue[ nI ] ) + " AND "
|
||||
NEXT
|
||||
// remove last " AND "
|
||||
cWhere := Left( cWhere, Len( cWhere ) - 5 )
|
||||
@@ -886,7 +885,7 @@ METHOD Update( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable
|
||||
NEXT
|
||||
|
||||
// remove last comma
|
||||
cUpdateQuery := Left( cUpdateQuery, Len( cUpdateQuery ) -1 )
|
||||
cUpdateQuery := Left( cUpdateQuery, Len( cUpdateQuery ) - 1 )
|
||||
|
||||
//DAVID:
|
||||
IF lOldRecord
|
||||
@@ -894,10 +893,7 @@ METHOD Update( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable
|
||||
// WARNING: if there are more than one record of ALL fields matching, all of those records will be changed
|
||||
|
||||
FOR nI := 1 TO Len( oRow:aFieldStruct )
|
||||
cWhere += oRow:aFieldStruct[ nI ][ MYSQL_FS_NAME ] + "="
|
||||
// use original value
|
||||
cWhere += ClipValue2SQL( oRow:aOriValue[ nI ] )
|
||||
cWhere += " AND "
|
||||
cWhere += oRow:aFieldStruct[ nI ][ MYSQL_FS_NAME ] + "=" + ClipValue2SQL( oRow:aOriValue[ nI ] ) + " AND "
|
||||
NEXT
|
||||
// remove last " AND "
|
||||
cWhere := Left( cWhere, Len( cWhere ) - 5 )
|
||||
@@ -1146,31 +1142,31 @@ METHOD GetBlankRow( lSetValues ) CLASS TMySQLTable
|
||||
FOR i := 1 TO ::nNumFields
|
||||
|
||||
SWITCH ::aFieldStruct[ i ][ MYSQL_FS_TYPE ]
|
||||
CASE MYSQL_STRING_TYPE
|
||||
CASE MYSQL_VAR_STRING_TYPE
|
||||
CASE MYSQL_BLOB_TYPE
|
||||
CASE MYSQL_DATETIME_TYPE
|
||||
CASE MYSQL_TYPE_STRING
|
||||
CASE MYSQL_TYPE_VAR_STRING
|
||||
CASE MYSQL_TYPE_BLOB
|
||||
CASE MYSQL_TYPE_DATETIME
|
||||
aRow[ i ] := ""
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_SHORT_TYPE
|
||||
CASE MYSQL_LONG_TYPE
|
||||
CASE MYSQL_LONGLONG_TYPE
|
||||
CASE MYSQL_INT24_TYPE
|
||||
CASE MYSQL_DECIMAL_TYPE
|
||||
CASE MYSQL_TYPE_SHORT
|
||||
CASE MYSQL_TYPE_LONG
|
||||
CASE MYSQL_TYPE_LONGLONG
|
||||
CASE MYSQL_TYPE_INT24
|
||||
CASE MYSQL_TYPE_NEWDECIMAL
|
||||
aRow[ i ] := 0
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_TINY_TYPE
|
||||
CASE MYSQL_TYPE_TINY
|
||||
aRow[ i ] := .F.
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_DOUBLE_TYPE
|
||||
CASE MYSQL_FLOAT_TYPE
|
||||
CASE MYSQL_TYPE_DOUBLE
|
||||
CASE MYSQL_TYPE_FLOAT
|
||||
aRow[ i ] := 0.0
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_DATE_TYPE
|
||||
CASE MYSQL_TYPE_DATE
|
||||
aRow[ i ] := hb_SToD( "" )
|
||||
EXIT
|
||||
|
||||
@@ -1264,32 +1260,29 @@ METHOD Refresh() CLASS TMySQLTABLE
|
||||
// returns a WHERE x=y statement which uses primary key (if available)
|
||||
METHOD MakePrimaryKeyWhere() CLASS TMySQLTable
|
||||
|
||||
LOCAL ni, cWhere := " WHERE "
|
||||
LOCAL ni, cWhere := ""
|
||||
|
||||
FOR nI := 1 TO Len( ::aFieldStruct )
|
||||
|
||||
// search for fields part of a primary key
|
||||
IF hb_bitAnd( ::aFieldStruct[ nI ][ MYSQL_FS_FLAGS ], PRI_KEY_FLAG ) == PRI_KEY_FLAG .OR.;
|
||||
IF hb_bitAnd( ::aFieldStruct[ nI ][ MYSQL_FS_FLAGS ], PRI_KEY_FLAG ) == PRI_KEY_FLAG .OR. ;
|
||||
hb_bitAnd( ::aFieldStruct[ nI ][ MYSQL_FS_FLAGS ], MULTIPLE_KEY_FLAG ) == MULTIPLE_KEY_FLAG
|
||||
|
||||
cWhere += ::aFieldStruct[ nI ][ MYSQL_FS_NAME ] + "="
|
||||
IF ! Empty( cWhere )
|
||||
cWhere += " AND "
|
||||
ENDIF
|
||||
|
||||
// if a part of a primary key has been changed, use original value
|
||||
|
||||
cWhere += ClipValue2SQL( ::aOldValue[ nI ] )
|
||||
|
||||
cWhere += " AND "
|
||||
cWhere += ::aFieldStruct[ nI ][ MYSQL_FS_NAME ] + "=" + ClipValue2SQL( ::aOldValue[ nI ] )
|
||||
ENDIF
|
||||
|
||||
NEXT
|
||||
|
||||
// remove last " AND "
|
||||
cWhere := Left( cWhere, Len( cWhere ) - 5 )
|
||||
IF ! Empty( cWhere )
|
||||
cWhere := " WHERE " + cWhere
|
||||
ENDIF
|
||||
|
||||
RETURN cWhere
|
||||
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------------------------*/
|
||||
|
||||
// Every available MySQL server
|
||||
@@ -1648,7 +1641,7 @@ METHOD TableStruct( cTable ) CLASS TMySQLServer
|
||||
aSFIeld[ DBS_DEC ] := 8
|
||||
EXIT
|
||||
|
||||
CASE MYSQL_MEDIUM_BLOB_TYPE
|
||||
CASE MYSQL_TYPE_MEDIUM_BLOB
|
||||
aSField[ DBS_TYPE ] := "B"
|
||||
aSField[ DBS_LEN ] := aField[ MSQL_FS_LENGTH ]
|
||||
EXIT
|
||||
|
||||
Reference in New Issue
Block a user