Hi Jeremy, many thanks for your answers - this is crystal-clear!
Thank you! -- Thibaut Le mardi 20 avril 2021 à 17:12:13 UTC+2, Jeremy Evans a écrit : > On Tue, Apr 20, 2021 at 7:58 AM Thibaut Barrère <[email protected]> > wrote: > >> Hello! >> >> In a company I'm working with, there is a coding department (typically >> working with Ruby & Sequel), and then there is another department for >> data-oriented/analytics work (no code, leveraging tools like SQL, Tableau >> etc). >> >> In a number of cases, the data department has created some large SQL >> queries for analytics, which are then handed over to the coding department. >> >> I have two Sequel-specific questions related to this: >> >> 1/ Is there an easy way to enrich an existing SQL query, without >> rewriting the query itself into the Sequel DSL? >> >> To be more specific, I would like to reuse the query, but add an extra >> "AND order_id between X AND Y" or similar small stuff, to allow gradual >> data capture (N small queries with resumable synchronisation, instead of 1 >> big query which tend to time out). >> >> One way would be to issue a subquery (SELECT * from (... the raw sql) >> WHERE ...). >> > > You can do this via: > > DB[sql_string].from_self.where(...) > > >> Another way would be to parse the query, and append stuff >> programmatically. >> > > Sequel does not do this and will never do this. One of Sequel's primary > philosophies is that it never attempts to parse SQL. > > >> We are already using some form of "placeholders" and/or ERB templating >> for that purpose, but I wonder if something cleaner is possible with Sequel >> ? >> > > If you can modify the SQL queries to use placeholders, or use ERB to > change the SQL string before passing it to Sequel, those are certainly > additional options. > > >> 2/ I love to have Sequel logging activated, but for these specific >> queries, the log is just huge. Is there a way to disable the logging on a >> per-query basis only? >> > > There's no built in way. You could use a custom logger that skips logging > if the log messages contain a certain comment (which you could add via the > sql_comments extension). Or you could do something like this (not really > per query, but can be localized): > > def DB.log_connection_yield(*) > super unless Thread.current[:skip_sequel_logging] > end > > def DB.skip_logging > skip_logging = Thread.current[:skip_sequel_logging] > Thread.current[:skip_sequel_logging] = true > ensure > Thread .current[:skip_sequel_logging] = skip_logging > end > > DB.skip_logging do > # run whatever queries you don't want to log > end > > Thanks, > Jeremy > -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sequel-talk/cd20ba7c-d2b0-4e52-9d67-b65e1882c1d5n%40googlegroups.com.
