Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Bugs or Bads, to you the choice.
Message
De
28/05/2003 10:59:48
 
 
À
Tous
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Titre:
Bugs or Bads, to you the choice.
Divers
Thread ID:
00793521
Message ID:
00793521
Vues:
70
On SELECT command, result field is compute by the "VFP SELECT Parser".

Because is not possible declare result field type on SELECT command,
parser eval field expression, before loop on tables, in order to deduce the result field.
With this approach, you can have strange results for string expression.
* use where .F. to perform only parser phase.

CREATE CURSOR test1 (fm M,fc C(200))

SELECT  fm mr,fc cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* M4 ok ,C(200) ok
SELECT  fm+fm mr,fc+fc cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad ,C(254) bad
* I prefer M4,M4

SELECT  LTRIM(fm) mr,LTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad, C(200) ok
* I prefer M4
SELECT  RTRIM(fm) mr,RTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad, C(200) ok
* I prefer M4
SELECT  'A'+RTRIM(fm) mr,'A'+RTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad ,C(200) ok
* I prefer M4
x=SPACE(54)
SELECT  m.x+RTRIM(fm) mr,m.x+RTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C54 bad ,C(254) ok
* I prefer M4
x=SPACE(55)
SELECT  m.x+RTRIM(fm) mr,m.x+RTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C55 bad ,C(254) bug
* I prefer M4,M4
SELECT  LEFT(fm,254) mr,LEFT(fc,254) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C254 bad, C254 OK
* I prefer M4
SELECT  LEFT(fm,255) mr,LEFT(fc,255) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C254 bad, C254 bad, i declare more 254 then i want memo
* I prefer M4,M4
SELECT  GETWORDNUM(fm,1) mr,GETWORDNUM(fc,1) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad, C1 bad
* I prefer M4,M4
SELECT  STREXTRACT(fm,'a') mr,STREXTRACT(fc,'a') cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad, C1 bad
* I prefer M4,M4
SELECT  CHRTRAN(fm,'X','Y') mr,CHRTRAN(fc,'X','Y') cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad, C1 bad
* I prefer M4,M4
SELECT  LOWER(fm) mr,LOWER(fc) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad, C200 ok
* I prefer M4
SELECT  PADR(fm,255) mr,PADR(fc,255) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C254 bad, C254 ok
* I prefer M4
I CAN think this:
- SELECT not support operation on memo field;
- many string functions not support original string lenght;
and this is from design.

NO ! These are all operations that lack

In fact, SUBSTR() support memo, but only if you use it directly.
SELECT  SUBSTR(fm,1) mr,SUBSTR(fc,1) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* M4 ok ,C(200) ok

SELECT  SUBSTR(fm+fm,1) mr,SUBSTR(fc+fc,1) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad ,C(254) bad
* I prefer M4,M4
SELECT  STRTRAN(fm,'x') mr,STRTRAN(fc,'x') cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad ,C(200) ok
* I prefer M4
SELECT  ''+SUBSTR(fm,1) mr,''+SUBSTR(fc,1) cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* C1 bad ,C(200) ok
* I prefer M4
* but

SELECT  SUBSTR(SUBSTR(fm,1),4) mr,SUBSTR(fc,1)+'' cr from test1 WHERE .F. INTO CURSOR cResult
? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr'))
* M4 ok ,C(200) ok
* because SUBSTR() retain memo
One single word: chaos.

I put one request on Wish List for extend SELECT command, and resolve this.

Fabio
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform