So I’ve been tasked with converting some T-SQL code to C code. Whoever wrote the code I’m converting indulged in little to no code etiquette. I know this because of the complete lack of commenting, lack of indentation, and lack of begin/end blocks except where absolutely syntactically necessary (and a few thrown in arbitrarily for good measure).
This raises a few problems. The code I’m converting is based on the Metaphone algorithm. I say “based on” because it has quite a few… “undocumented improvements” that make it differ from the official implementation. Because of this, I can’t just go grab some Metaphone implementation, because then it wouldn’t actually be a “correct” translation.
So here’s the root of the issue(s):
if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @Result=@Result + 'j'
else
set @Result=@Result + 't'
Because of how Metaphone works, I’m pretty sure they meant:
if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @Result=@Result + 'j'
else
set @Result=@Result + 't'
But I’m not sure if it’s actually being interpreted as:
if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @Result=@Result + 'j'
else
set @Result=@Result + 't'
This little snippet isn’t too big of a deal, but just after it, there’s a section with five “if” statements and only one “else” statement and with no begin/end blocks to explicitly arrange them. None of this would be a big deal if I could actually run the code to to test and see, but sadly, I don’t have an environment to test it and nor do I have any output from previous usage of the code.
tl;dr: Do any of you T-SQL gurus out there know which of the above two statements it’ll be interpreted as and what’s the rule of them with shift/reduce conflicts in T-SQL? (Attach to first “if” statement, attach to last “if” statement, pick one at random?)
EDIT: Here’s another fun one a few lines down.
if @str1='t'
if substring(@str,@cnt,3) in ('tia','tio')
set @Result=@Result + 'x'
else
if @str2='th'
set @Result=@Result + '0'
else
if substring(@str,@cnt,3) <> 'tch'
set @Result=@Result + 't'
EDIT2: Ok, if I’m reading these answers correctly, that means the above is actually
if @str1='t'
if substring(@str,@cnt,3) in ('tia','tio')
set @Result=@Result + 'x'
else
if @str2='th'
set @Result=@Result + '0'
else
if substring(@str,@cnt,3) <> 'tch'
set @Result=@Result + 't'
Here is something that should help you out
If
testvarandtestvar2are both 1, it outputs “Got to 1”.If
testvar=1andtestvar2=2, it outputs “Got to 2”.If
testvar=2, there is no output. So theelseis getting paired off against the nearestif