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.

Reply via email to