| « Prev | Page 1 | Page 2 | Next » |
|
kinda reminds me of oracle's "DUAL"... it IS there ;-)
|
|
Well... I can see that most of that code does indeed make some warped sense. At least if you assume that the system should create tables as needed, maybe as some kind of upgrade script. I've seen worse things, along with their marginal justifications.
But catching exceptions, showing an error box, and THEN CARRYING ON AS IF EVERYTHING HAD WORKED? That's not even marginally justifiable. |
|
So TRWTF is that this function doesn't return FILE_NOT_FOUND?
Seriously, it is really amazing what kind of brillant crap people can come up with when they have no idea what they fuck they are doing. |
|
I don't suppose anyone could summarize here what this chunk of VB+SQL code does?
|
|
The function looks if a table with the given name exists in the database.
The result is first written into and the read from a helper table, which is created on demand. Obviously the developer did not know an easier way to get back the result of an "exists" test. |
|
I don't mind the on-the-fly table creation. In that case you're basically faced with create the table or fail the whole task. If the table is not there what else could you do? There's also a certain amount of benefit to putting the table creation code with the code that accesses it--gather like stuff together.
If creating the table isn't the right answer it almost certainly means the database needs to be restored from a backup and at that point it doesn't really matter what you do. The error handling, though, is utterly unjustifiable. |
1) If the table doesn't already exist, create it 2) If it's empty, then insert a row with 0, otherwise update all rows to contain 0 3) If it exists, update all rows to contain 1 4) Return the number in the first row 5) If anything fails, then display a prompt but keep going |
Re: tblIsThere
2012-06-04 10:48
•
by
Anonymous Coward
(unregistered)
|
Sure thing. It's a function that [appears] to return a boolean indicating whether a table exists in the database. To do this: 1) It checks to see if a table called "tblIsThere" exists. I'm saddened he didn't try to do this using recursion. If the table doesn't exist, he's making a sql string to create the table, with a single field, a BIT, named "isthere". 2) He executes the Sql inside a try/catch. If it fails, he alerts that it failed .. and then continues like nothing happened. 3) Then he updates the table, setting the value of isthere to 0. Again, inside a try/catch. Again, alerts if an exception is thrown and then continues like nothing is wrong. 4) He then checks to see if the table exists, and if it does he's updating tblIsThere so that the isthere BIT is switched to 1. Again, same try/catch "trick". 5) He then reads back the value of tblIsThere and returns the value of isthere, implicitly casting it as a booean |
Re: tblIsThere
2012-06-04 10:50
•
by
anony-mouse
(unregistered)
|
First it runs a query to see if the table tblIsThere exists; if it doesn't, it creates it. Then it sets the value of the first record of tblIsThere to 0. Then, it chekcs to see if the TableName string passed to the function exists as a table; if it does, it sets the first record's value of tblIsThere to 1. The function returns true/false depending on if TableName exists in the database. |
|
Part of the implied WTF (which some have missed, or perhaps pretended to miss for the lulz) is that this is the only function that does anything with this table. There are some things that it could make sense for a program to test (whether it can reach the database server at all, whether it can create/insert/update tables) but this function and table would still be a WTF regardless.
|
Re: tblIsThere
2012-06-04 10:55
•
by
LieutenantFrost
(unregistered)
|
|
It makes my eyes bleed.
|
Too bad that this summary only appears here, instead of appearing as a comment at the beginning of the function. |
|
tblIsThere? That depends on what the definition of the word "Is" is.
|
Re: tblIsThere
2012-06-04 11:17
•
by
SilentRunner
(unregistered)
|
|
It's amazing what words some people will come up with when trying to communicate with educated people.
|
No, it never makes sense. Production code shouldn't execute DDL statements, with the rare exception of CREATE TEMP TABLE. One can test a program's database access and DML statement permissions by following them with a terminal SELECT. I don't think most live applications should have DDL permissions. |
Reminds me of that old trick to fool fellow developers:
Worked at least in Oracle 8 (might have gotten the CREATE TABLE wrong, but you get the point). Since then I always use "FROM SYS.DUAL" to be sure. |
It forces the next dev to use their source control system to find out who did this. The culprit is then visited with unspeakable horrors. |
Of the lovecraftian kind of course, nothing like having fishy tentacled old ones to visit ones co-workers at night. |
|
SELECT * FROM commentIsThere
If Count = 0 Then INSERT INTO commentIsThere (isthere) VALUES ('BRILLANT') Else UPDATE commentIsThere SET isthere = 'FILE_NOT_FOUND' End If |
|
This is perfectly acceptable in an Agile project. It's obviously "version 1" of this table. In the next sprint they will be enhancing it with more functionality, such as "DatabaseIsThere", "ServerIsThere", "NetworkIsThere", "UniverseIsThere", etc. ;-)
|
If you've been paying attention to quantum theory you'd know that UniverseIsThere cannot be represented in a simple boolean. |
Nobody said that a boolean would be returned for UniverseIsThere. Clearly, it would have to be a string: "Maybe" |
Obviously, UniverseIsThere must be able to hold the values 0, 1, or FILE_NOT_FOUND. |
Yes Impolemting the Trillian data type. We have booleans and we have enums, and I have choosen Trillian for the name of this type as a side reference to HHGTTG. Long live Douglas Adams! |
|
The "developer" who wrote this code sure as hell isn't the type of developer to make use of unit testing (or, judging from the cls prefix, know anything about writing code from the last 10 years or so).
The saddest part and for me TRWTF is that developers like this "developer" seem to be much more common than developers who do know what they are doing. |
I am lern two in past weeks: "ain't" and "massage." |
Re: tblIsThere
2012-06-04 13:25
•
by
big picture thinker
(unregistered)
|
It could be just a script some dev wrote to test something and s/he never got rid of it. This is further indicated by the message boxes that are displayed showing direct SQL errors without any dumbed-down interpretation for end users. Not really a WTF to me. The only WTF in my mind is the isTableThere field. I hate it when people use tables to store info about tables. What's that called? Meta database? Database within a database? Something like that. CAPTCHA: ullamcorper |
Mega-Dittos! |
Metadata should be stored in XML in case the database is down. Also this is a legitimate reason for production code to create tables. If you need to do a few queries you can cut the relevant portion out of the XML, load it into the database (there are libraries to make all this easy) do your business and then clean up those new tables and go on. |
The first half is typical VB drudgery to create objects and stuff to declare what you're obviously doing. Then they create the table if it doesn't exist, make sure that there really is a row in this table. And do some other stuff, and set the row to 0. Then they check whether some table exists, update isThere to 1 if it does, and request the value of the table. I guess it never occurred to the author to simply: SELECT COUNT(*) FROM INFORMATION_SCHEMA.blahblah WHERE table_name = ? Because the I_S views are magical or something, so you can't just query them? |
Everyone ain't profesional DBA knowing how to masage querys. |
At that rate you should have a decent vocabulary in about 50 years. |
Indian ain't have shortened life span providing he stay away from massage in diarrhea food poisioning. |
|
Production code shouldn't execute DDL statements
I couldn't agree more. Yet, I know of a certain individual who, when asked what would be the best way to implement a relationship such as "user->list of friends" (typical of a social network), recommended creating a separate table for each user. That means, each user would have his/her own list of friends in his/her own personal, private table created on the fly. It would be interesting to see if the DB behind Facebook contains indeed over 900 million tables... |
You laugh, but this really happened at my workplace recently. We were designing an inventory app where one object may have several associated people. (Car analogy: one car may have many drivers.) Mr. Genius proposed that a table for each person would be created when you log in to the app by selecting your records from the primary table. I asked what should happen when the user updates info on an item. Should the update go back into his own table or back to the master table? Yeah, he admitted, that could get complicated. So... ? Nothing. He could see a problem with his design, but could not back away from it or come up with any other solution. So he just stood there, silent, stuck at a mental dead end, without even the common sense to throw it in reverse. I guess this is the expected level of brainpower for a former Director of Big Things (recently demoted). |
|
One great thing (of many) about Agile is that it ushered in the code-first ORM era of development. That would surely have avoided such a ridiculous DB table.
|
You won't fool me with that. I know for a fact that I have no clue what your code did. |
The definition of "Is" is is is is is is. |
Oracle has a built-in system table named "dual" with exactly one row. (Unlike some DBMSes, Oracle emits a syntax error on any query or subquery that doesn't have a FROM clause, so a single-row table is useful for things like "SELECT current_date FROM dual" and "SELECT 1 FROM dual WHERE EXISTS (...)" and so on.) Anonymous' code would hide that table by creating a non-system table with that name . . . and it would put two records in that user table, thereby causing lots of queries to return the wrong number of rows. |
I use source control to find culprits... and I imagine the horrors they should suffer for every great display of stupidity... should I see a doctor, or a shrinker? |
...or 42, don't forget! (Or perhaps the xkcd number; see http://xkcd.com/207/ ) |
Re: tblIsThere
2012-06-04 18:07
•
by
Darth Paul
(unregistered)
|
Given how badly the web interface is designed, I would not be surprised. |
If you think about what a table is in an abstract sense, this actually makes a lot of sense. You are storing a list of objects related to a main object, which might have extra properties (date when they became friends, type of relationship...). The problem is that the implementation is not designed for that. |
|
It looks a bit like a broken semaphore: I.e., update to 1 to indicate that a process is running that can't be interrupted. Of course, nothing else checks the semaphore, including this routine, so all it really is, is one majorly incredible WTF.
|
How about a nullable boolean then? |
Please... you're no new guy here, Pedobearmudgeon. That scarecrow is *not* worth a talk. He's not even a joke getting old, he deserves only one thing : to be shot with *the Ignore gun*. |
Re: tblIsThere
2012-06-05 05:41
•
by
Doctor_of_Ineptitude
(unregistered)
|
I was of the opinion that this particular scarecrow should be secured, delineated and segmented. |
Re: tblIsThere
2012-06-05 07:05
•
by
OptimalExpert
(unregistered)
|
Such is the professional practice of 'sharding' a database. It is best to put every user in her own virtual machine, so resource sharing is fair and can be managed by a hypervisor. I think friendship connections between users are represented by TCP sockets, so that messages can be exchanged easily. You see, this requires no traditional database at all! |
Except shops such as the one that allows such a ridiculous DB table won't embrace Agile since ORMs mean you can't put everything in a stored procedure (and it means you *gasp!* have to recompile when the database changes!), and doing TDD means less time to sling code, and pair programming means you have half as many things going at the same time (because each task requires 2 programmers instead of one), and you can't bother the business users for requirements because they have "real" work to do... |
Agree, fake Nagesh is so lame, he doesn't deserve any attention. HEAR ME EVERYONE. I AM IGNORING FAKE NAGESH, I REPEAT, I AM IGNORING FAKE NAGESH. PAY NO ATTENTION TO HIM, JUST LIKE I AM DOING NOW. |
| « Prev | Page 1 | Page 2 | Next » |