The main reason for me is that they are a protection measure against making
typos in SQL queries. You'd think a typo would get noticed but not all
queries fail immediately when they have a mistake in them. Some of them
just return no results, or return wrong results. For queries that are off
the beaten path, we end up with issues like
this<https://bugs.launchpad.net/mixxx/+bug/1175024>(which Steven just
fixed).

In fact, I would prefer we totally got rid of writing SQL queries directly
in code and instead composed them using declarative C++ classes which are
then compiled down to SQL. Not quite a full-on ORM, just something for
composing SQL queries (like SQLAlchemy for C++).

On Wed, May 1, 2013 at 2:56 PM, Owen Williams <[email protected]> wrote:

> Are the constants really a good idea?  What is the purpose behind using
> them?  Ideally the schema shouldn't be changing very often so having
> them hardcoded seems ok from a maintenance perspective.  And from a
> readability perspective, the constant method looks really ugly to me.
> I'm just wondering what the other side of the argument is.
>
> owen
>
> On Wed, 2013-05-01 at 14:42 -0400, RJ Ryan wrote:
> > On Wed, May 1, 2013 at 2:15 PM, Daniel Schürmann <[email protected]>
> > wrote:
> >         Hi Steven,
> >
> >         Yes, we should solve this issue and use the const values in
> >         any case.
> >         This allows to rely on IDE features like "display call tree".
> >
> >
> >
> > I think we should stick with whatever makes the code easiest to
> > maintain (which would be using the constants when possible) -- maybe
> > the constants should be renamed to be a little easier on the eyes? A
> > lot of the DAO code doesn't use the constants, that's true. We should
> > fix those queries.
> >
> >
> >         But I am not sure if the use of const QString is performance
> >         neutral to const char* and #define because the heavy QSting
> >         constructor is called.
> >
> >         So IMHO we should change it to const char*.
> >
> >
> > There are a lot of non-performance-neutral choices we make in Mixxx,
> > but that alone isn't enough to make a decision, we have to take the
> > context into account. Compared to the QSqlQuery::exec() that comes
> > immediately after all these queries, some string concatenation isn't
> > going to break the bank, cycle-wise. Processors are pretty good at
> > memcpy these days :).
> >
> >
> >         Kind regards,
> >
> >         Daniel
> >
> >
> >
> >
> >
> >         Am 01.05.2013 17:32, schrieb Steven Boswell II:
> >
> >         > Most of the DAO header files in src/library/dao have
> >         > definitions for the names of tables, and the names of
> >         > columns in the tables, but they're used sporadically; quite
> >         > often, references to them are hardcoded.
> >         >
> >         >
> >         > I'm writing a new feature (the aforementioned
> >         > auto-DJ-crates), and the necessary info is stored in a
> >         > temporary table, so I'm writing several SQL queries.  I'm
> >         > just wondering if I should hardcode the table/column
> >         > references (which won't automatically get updated if the
> >         > underlying names change), or try to write them using the
> >         > table/column names defined in header files (which makes the
> >         > query harder to read).
> >         >
> >         >
> >         > Here's an example.  The comment is the hardcoded,
> >         > human-readable version, and following it is the hard-to-read
> >         > one that'll adapt automatically to changes.
> >         >
> >         >
> >         >
> >         >     // INSERT INTO temp_autodj_crates (track_id, craterefs,
> >         > timesplayed, autodjrefs) SELECT crate_tracks.track_id, COUNT
> >         > (*), library.timesplayed, 0 FROM crate_tracks, library WHERE
> >         > crate_tracks.crate_id IN (SELECT id FROM crates WHERE autodj
> >         > = 1) AND crate_tracks.track_id = library.id AND
> >         > library.mixxx_deleted = 0 GROUP BY crate_tracks.track_id,
> >         > library.timesplayed;
> >         >     strQuery = QString ("INSERT INTO " AUTODJCRATES_TABLE
> >         >         " (" AUTODJCRATESTABLE_TRACKID ", "
> >         > AUTODJCRATESTABLE_CRATEREFS ", "
> >         >         AUTODJCRATESTABLE_TIMESPLAYED ", "
> >         > AUTODJCRATESTABLE_AUTODJREFS ")"
> >         >         " SELECT " CRATE_TRACKS_TABLE ".%1 , COUNT (*), "
> >         >         LIBRARY_TABLE ".%2, 0 FROM " CRATE_TRACKS_TABLE ", "
> >         > LIBRARY_TABLE
> >         >         " WHERE " CRATE_TRACKS_TABLE ".%4 IN "
> >         >         "(SELECT %5 FROM " CRATE_TABLE " WHERE %6 = 1) AND "
> >         >         CRATE_TRACKS_TABLE ".%1 = " LIBRARY_TABLE ".%7 AND "
> >         > LIBRARY_TABLE
> >         >         ".%3 == 0 GROUP BY " CRATE_TRACKS_TABLE ".%1, "
> >         > LIBRARY_TABLE ".%2")
> >         >             .arg (CRATETRACKSTABLE_TRACKID)        // %1
> >         >             .arg (LIBRARYTABLE_TIMESPLAYED)        // %2
> >         >             .arg (LIBRARYTABLE_MIXXXDELETED)    // %3
> >         >             .arg (CRATETRACKSTABLE_CRATEID)        // %4
> >         >             .arg (CRATETABLE_ID)                // %5
> >         >             .arg (CRATETABLE_AUTODJ)            // %6
> >         >             .arg (LIBRARYTABLE_ID);                // %7
> >         >
> >         >
> >         >
> >         > Which should I do?
> >         >
> >         >
> >         > Pretty soon, I'll make a blueprint for the auto-DJ-crates
> >         > feature.
> >         >
> >         >
> >         >
> >         > Steven Boswell
> >         >
> >         >
> >         >
> >         >
> >         >
> ------------------------------------------------------------------------------
> >         > Introducing AppDynamics Lite, a free troubleshooting tool for
> Java/.NET
> >         > Get 100% visibility into your production application - at no
> cost.
> >         > Code-level diagnostics for performance bottlenecks with <2%
> overhead
> >         > Download for free and get started troubleshooting in minutes.
> >         > http://p.sf.net/sfu/appdyn_d2d_ap1
> >         >
> >         >
> >         > _______________________________________________
> >         > Get Mixxx, the #1 Free MP3 DJ Mixing software Today
> >         > http://mixxx.org
> >         >
> >         >
> >         > Mixxx-devel mailing list
> >         > [email protected]
> >         > https://lists.sourceforge.net/lists/listinfo/mixxx-devel
> >
> >
> >
> >
> ------------------------------------------------------------------------------
> >         Introducing AppDynamics Lite, a free troubleshooting tool for
> >         Java/.NET
> >         Get 100% visibility into your production application - at no
> >         cost.
> >         Code-level diagnostics for performance bottlenecks with <2%
> >         overhead
> >         Download for free and get started troubleshooting in minutes.
> >         http://p.sf.net/sfu/appdyn_d2d_ap1
> >         _______________________________________________
> >         Get Mixxx, the #1 Free MP3 DJ Mixing software Today
> >         http://mixxx.org
> >
> >
> >         Mixxx-devel mailing list
> >         [email protected]
> >         https://lists.sourceforge.net/lists/listinfo/mixxx-devel
> >
> >
> >
> ------------------------------------------------------------------------------
> > Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
> > Get 100% visibility into your production application - at no cost.
> > Code-level diagnostics for performance bottlenecks with <2% overhead
> > Download for free and get started troubleshooting in minutes.
> > http://p.sf.net/sfu/appdyn_d2d_ap1
> > _______________________________________________ Get Mixxx, the #1 Free
> MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mixxx-devel
>
>
>
------------------------------------------------------------------------------
Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
Get 100% visibility into your production application - at no cost.
Code-level diagnostics for performance bottlenecks with <2% overhead
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap1
_______________________________________________
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Reply via email to