It appears the problem occurs because do_log has been implemented as a
single-line macro, which in itself has an unbracketed if-statement,
without else.

        #define do_log(X, Y...) if ( !(< DBG, TME >)[T] ) low_log(X, Y)

The original 'qresult-else' will most likely be seen as an else for the
macro definition after compilation, causing it to be behaving different
than I expected.

Now I wonder how I should rewrite the above macro definition so I can be
sure it checks it's own 'if' and never unexpectedly interferes which
other else statements... I don't know how...


Regards,

Arjan

 
-----Oorspronkelijk bericht-----
Van: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Namens Arjan van
Staalduijnen
Verzonden: Thursday, July 31, 2008 12:05 PM
Aan: [email protected]
Onderwerp: 'if' with failing 'else' block

This morning I've been busy tracking a bug in my code, for which I have
no explanation as to why it is a bug.
The situation is I have an if-else test where, in case of a match, the
if-block gets executed, but in case of a non-match, the else-block does
NOT get executed. If I turn the whole test around by adding a NOT to the
test, and swapping the if and else blocks, everything works.

This is the code which has the bug:

string key_name = "IssueID_shortname";
array qresult = myDB->Query("SHOW keys FROM
dbFinalPublicationPassive.tbIssueDetails");
if (qresult && has_value(qresult->Key_name || ({}), key_name))
        do_log("Index %O was already set", key_name);
else
{
        do_log("Adding index %O", key_name);
      myDB->Query("ALTER TABLE dbFinalPublicationPassive.tbIssueDetails"
                                " ADD INDEX IssueID_shortname (IssueID,
ShortName)");
}
        
This code does not have the bug:

string key_name = "IssueID_shortname";
array qresult = myDB->Query("SHOW keys FROM
dbFinalPublicationPassive.tbIssueDetails");
if (!(qresult && has_value(qresult->Key_name || ({}), key_name)))
{
        do_log("Adding index %O", key_name);
      myDB->Query("ALTER TABLE dbFinalPublicationPassive.tbIssueDetails"
                                " ADD INDEX IssueID_shortname (IssueID,
ShortName)");
}
else
        do_log("Index %O was already set", key_name);


Anyone has a clue? (Pike 7.4.464)


Regards,

Arjan

__________________________________________________________
Deze e-mail en de inhoud is vertrouwelijk en uitsluitend bestemd voor de
geadresseerde(n). Indien u niet de geadresseerde bent van deze e-mail
verzoeken wij u dit direct door te geven aan de verzender door middel
van een reply e-mail en de ontvangen e-mail uit uw systemen te
verwijderen. Als u geen geadresseerde bent, is het niet toegestaan om
kennis te nemen van de inhoud, deze te kopieren, te verspreiden, bekend
te maken aan derden noch anderszins te gebruiken.

The information contained in this e-mail is confidential and may be
legally privileged. It is intended solely for the addressee. If you are
not the intended recipient, any disclosure, copying, distribution or any
action taken or omitted to be taken in reliance on it, is prohibited and
may be unlawful. Please notify us immediately if you have received it in
error by reply e-mail and then delete this message from your system.
__________________________________________________________




__________________________________________________________
Deze e-mail en de inhoud is vertrouwelijk en uitsluitend bestemd voor de 
geadresseerde(n). Indien u niet de geadresseerde bent van deze e-mail verzoeken 
wij u dit direct door te geven aan de verzender door middel van een reply 
e-mail en de ontvangen e-mail uit uw systemen te verwijderen. Als u geen 
geadresseerde bent, is het niet toegestaan om kennis te nemen van de inhoud, 
deze te kopieren, te verspreiden, bekend te maken aan derden noch anderszins te 
gebruiken.

The information contained in this e-mail is confidential and may be legally 
privileged. It is intended solely for the addressee. If you are not the 
intended recipient, any disclosure, copying, distribution or any action taken 
or omitted to be taken in reliance on it, is prohibited and may be unlawful. 
Please notify us immediately if you have received it in error by reply e-mail 
and then delete this message from your system.
__________________________________________________________



  • 'if... Arjan van Staalduijnen
    • ... Arjan van Staalduijnen
      • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
      • ... Marc Dirix
      • ... Martin Bähr
        • ... Arjan van Staalduijnen
          • ... Stephen R. van den Berg
            • ... Arjan van Staalduijnen

Reply via email to