|
Christian Graus wrote: and learn from it.
Hear hear!
And this way many people can learn from one mistake. It doesn't matter who made the mistake as long as we all learn.
|
|
|
|
|
"That's the problem with a spell checker. It only helps with bad spelling, not stupidity." - Rob Graham
|
|
|
|
|
I came across this ORDER BY clause in a T-SQL view when I was asked to fix performance issues (command timouts) on a legacy internal application:
ORDER BY dbo.dt_Downtime.PU, CONVERT(smalldatetime, CONVERT(varchar, dbo.dt_Downtime.StopTime, 101), 101), LEFT(CONVERT(varchar, <br />
dbo.dt_Downtime.StopTime, 114), 5)
Then to add to the problem the WHERE clause of the query referencing the view looked like this after being concatenated together:
and CONVERT(smalldatetime,CONVERT(varchar,StopTime,101),101)>='2/14/2008'<br />
and CONVERT(smalldatetime,CONVERT(varchar,StopTime,101),101)<='2/15/2008'
Fixing these two lovlies brought the cost of the query plan down to 9 from 77
|
|
|
|
|
I've had to fix that sort of thing as well. In one case the program had been taking forty minutes to run and after I rectified it (and added a bunch of new functionality) it took only ten minutes to run.
The guy who had previously been maintaining it said, "It was like that when I got it, and if it ain't broke..."
The craziest part was that the code was doing:
and CONVERT(varchar,CONVERT(varchar,StopTime,101))>='2/14/2008'
and CONVERT(varchar,CONVERT(varchar,StopTime,101))<='2/15/2008'
(except in embedded RDB syntax, not T-SQL)
When I asked why it was converting varchar to varchar the response was, "The guy who wrote it said it wouldn't work otherwise."
|
|
|
|
|
Any idea what the point was with that? I mean, I know it's bad, but there must have been a reason for it...
I hope you replaced it with a stored proc with nice type-specific comparisons.
|
|
|
|
|
No body is around who ever had anything to do with writing the application. As far as I can tell from the code the idea was to sort by date then by time
If they had any other intent then they didn't do that right either because that's all that code does (The order by anyway).
|
|
|
|
|
Mark J. Miller wrote: No body is around
Well hidden I suspect.
|
|
|
|
|
how to zoom and pan an image using asp.net 2.0 with c#?? Or using AJAX in it.
|
|
|
|
|
You need to have a frying pan and draw the image on it.
Vasudevan Deepak Kumar
Personal Homepage Tech Gossips
A pessimist sees only the dark side of the clouds, and mopes; a philosopher sees both sides, and shrugs; an optimist doesn't see the clouds at all - he's walking on them. --Leonard Louis Levinson
|
|
|
|
|
you forget to mention to use a teflon-coated pan to avoid sticking.
(yes|no|maybe)*
|
|
|
|
|
And don't forget to make humming noises
Zmmm, zmmm, zoommmm , zoommmmm
codito ergo sum
|
|
|
|
|
damn, forget that...
like [do not post programming questions in this forum.] is quite difficult to read... or maybe it's a parsing problem
(yes|no|maybe)*
modified on Wednesday, February 20, 2008 1:57 AM
|
|
|
|
|
s_mon wrote: (yes|no|maybe)*
Maybe
|
|
|
|
|
Adwita wrote: how to zoom and pan an image using asp.net 2.0 with c#??
Get a chair with wheels. Next get an X10 adapter for little motors that you can attach to the chair, the rest should be easy enough to copy from the X10 SDK.
|
|
|
|
|
One my friends once wrote
<br />
int i = 0;<br />
<br />
while(i < 10)<br />
{<br />
i = i++;
}<br />
i laughed my ... off.
The fact that it makes sense, made it more funny...
-st0le [st0le'n'stuff softwarez!]
http://st0lenc0des.googlepages.com/
modified 20-Oct-19 21:02pm.
|
|
|
|
|
That's a subtle horror!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
ever asked him, what that should do... and what i++ means... sry, i'm curious about it
(yes|no|maybe)*
|
|
|
|
|
st0le wrote: The fact that it makes sense
Makes sense in the fact that it compiles and does not break anything?
|
|
|
|
|
leppie wrote: it compiles and does not break anything
Two big qualities indeed.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
Perhaps I'm being Captain Obvious but, in plain C at least, the result is undefined. The compiler I'm using at the moment does not leave the loop as i is never incremented.
|
|
|
|
|
I wrote a test application (the code works in VC++ 8, and i stays 0 in VC#), but it seems that I had a mental blockade to enter i = i++; It took me two i = i+1; until I could force my fingers to do that.
Is the result really undefined by ANSI or whoevers specification?
|
|
|
|
|
Doc Lobster wrote: Is the result really undefined by ANSI or whoevers specification?
I think i = i++ might be OK, but apparently i = ++1 + 1 is not.
I'm looking in the ISO/IEC 9899:TC2 document, section 6.5 on page 67.
See footnote 71
"
6.5 Expressions
1 An expression is a sequence of operators and operands that specifies computation of a
value, or that designates an object or a function, or that generates side effects, or that
performs a combination thereof.
2 Between the previous and next sequence point an object shall have its stored value
modified at most once by the evaluation of an expression. Furthermore, the prior value
shall be read only to determine the value to be stored.71)
3 The grouping of operators and operands is indicated by the syntax.72) Except as specified
later (for the function-call (), &&, ||, ?:, and comma operators), the order of evaluation
of subexpressions and the order in which side effects take place are both unspecified.
4 Some operators (the unary operator ~, and the binary operators <<, >>, &, ^, and |,
collectively described as bitwise operators) are required to have operands that have
integer type. These operators yield values that depend on the internal representations of
integers, and have implementation-defined and undefined aspects for signed types.
5 If an exceptional condition occurs during the evaluation of an expression (that is, if the
result is not mathematically defined or not in the range of representable values for its
type), the behavior is undefined.
6 The effective type of an object for an access to its stored value is the declared type of the
object, if any.73) If a value is stored into an object having no declared type through an
lvalue having a type that is not a character type, then the type of the lvalue becomes the
effective type of the object for that access and for subsequent accesses that do not modify
71) This paragraph renders undefined statement expressions such as
i = ++i + 1;
a[i++] = i;
while allowing
i = i + 1;
a[i] = i;
72) The syntax specifies the precedence of operators in the evaluation of an expression, which is the same
as the order of the major subclauses of this subclause, highest precedence first. Thus, for example, the
expressions allowed as the operands of the binary + operator (6.5.6) are those expressions defined in
6.5.1 through 6.5.6. The exceptions are cast expressions (6.5.4) as operands of unary operators
(6.5.3), and an operand contained between any of the following pairs of operators: grouping
parentheses () (6.5.1), subscripting brackets [] (6.5.2.1), function-call parentheses () (6.5.2.2), and
the conditional operator ?: (6.5.15).
Within each major subclause, the operators have the same precedence. Left- or right-associativity is
indicated in each subclause by the syntax for the expressions discussed therein.
73) Allocated objects have no declared type.
"
|
|
|
|
|
The code I wrote to test it is:
# include <stdio.h>
int
main
(
int argc
,
char* argv[]
)
{
int result = 0 ;
result = result++ ;
printf ( "%d" , result ) ;
return ( result ) ;
}
(This is the same code I used to test Borland C/C++ 5.5)
compiling this using
DEC C V6.0-001 on OpenVMS Alpha V7.3-2
yields the warning
"
In this statement, the expression "result=result++" modifies the variable "result" more than once without an intervening sequence point. This behavior is undefined.
"
but it compiles and returns 1 when executed.
|
|
|
|
|
It works with Borland C/C++ 5.5
|
|
|
|
|
With gcc (version 3.4.4) it doesn't work, i remaining 0 forever.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|