Rewrite query to handle DECIMAL types if needed
(query: &str, conn: &rusqlite::Connection)
| 2857 | |
| 2858 | /// Rewrite query to handle DECIMAL types if needed |
| 2859 | pub fn rewrite_query_for_decimal(query: &str, conn: &rusqlite::Connection) -> Result<String, rusqlite::Error> { |
| 2860 | use sqlparser::parser::Parser; |
| 2861 | use sqlparser::dialect::PostgreSqlDialect; |
| 2862 | |
| 2863 | // Parse the SQL statement (keep JSON path placeholders for now) |
| 2864 | let dialect = PostgreSqlDialect {}; |
| 2865 | let mut statements = Parser::parse_sql(&dialect, query) |
| 2866 | .map_err(|e| rusqlite::Error::ToSqlConversionFailure(Box::new(e)))?; |
| 2867 | |
| 2868 | if statements.is_empty() { |
| 2869 | return Ok(query.to_string()); |
| 2870 | } |
| 2871 | |
| 2872 | // Rewrite the first statement for decimal handling |
| 2873 | let mut rewriter = crate::rewriter::DecimalQueryRewriter::new(conn); |
| 2874 | if let Err(e) = rewriter.rewrite_statement(&mut statements[0]) { |
| 2875 | // If rewriting fails, log and return original query |
| 2876 | tracing::warn!("Failed to rewrite query for decimal: {}", e); |
| 2877 | return Ok(query.to_string()); |
| 2878 | } |
| 2879 | |
| 2880 | let rewritten = statements[0].to_string(); |
| 2881 | tracing::debug!("Decimal rewriter output: {}", rewritten); |
| 2882 | Ok(rewritten) |
| 2883 | } |
| 2884 | |
| 2885 | #[cfg(test)] |
| 2886 | mod tests { |
nothing calls this directly
no test coverage detected