i2UddlmZddlZddlZddlZddlZddlmZddlZ ddl m Z ddl Z ej r ddlmZddlZejeejeedejffZded<dd ZddZddZddZddZdS)) annotationsN)Decimalregister_io_source)Iterator_ExpressionTreeztyping_extensions.TypeAlias predicatepl.Exprreturnduckdb.Expression | Nonectj|jd} t |}t j|S#t$rYdSwxYw)aConvert a Polars predicate expression to a DuckDB-compatible SQL expression. Parameters: predicate (pl.Expr): A Polars expression (e.g., col("foo") > 5) Returns: SQLExpression: A DuckDB SQL expression string equivalent. None: If conversion fails. Example: >>> _predicate_to_expression(pl.col("foo") > 5) SQLExpression("(foo > 5)") json)formatN)rloadsmeta serialize_pl_tree_to_sqlduckdb SQLExpression Exception)r tree sql_filters >C:\PYTHON\_runtimes\venv\Lib\site-packages\duckdb/polars_io.py_predicate_to_expressionrsk :in..f.== > >D$T** #J/// tts"A A A opstrc ` ddddddddd |S#t$rt|wxYw) z}Map Polars binary operation strings to SQL equivalents. Example: >>> _pl_operation_to_sql("Eq") '=' z>==%ANDOR)LtLtEqGtGtEqEqModulusAndOr)KeyErrorNotImplementedError)rs r_pl_operation_to_sqlr.0sc &       &&&!"%%%&s- identifierc:|dd}d|dS)zEscape SQL identifiers by doubling any double quotes and wrapping in double quotes. Example: >>> _escape_sql_identifier('column"name') '"column""name"' "z"")replace)r/escapeds r_escape_sql_identifierr4Fs'  d++G w>>>rc|\}|dkr||}t|tsJd|dt||d|d|d}}}t|tsJd|dt|t|tsJd|d t|t|tsJd |dt|d t |d t |d t |d S|dkrI||}t|tsJd|d t|t|S|dvrI||}t|tsJd|dt|t |S|dkrM||}t|ttfsJdt|t |S|dkrS||} t| tttfsJdt| t | S|dkrI||} t| tsJd|dt| | d} t| tsJd|dt| | d} t| tsJd|dt| | d} t| tsJd|dt| d| vrI| d}t | d}|dkrd |dS|dkrd |dSd |}t|d!| }t||d"kr||}t|tsJd|dt|| d#}|d$krA| d%i}t|trd&|vrd'}t|n|d(krd)|}t||d%}t|tsJd|dt|t |S|d*krS||}t|tsJd|dt|d+|vr"d,|vrt |d+}|d,}n0tt|}|}t|tsJd|d-t|t|tsJd|d.t||d/s|d0kr|d0}t|tsJd|d1t|d2t!|cxkrd3ks nJd|d1t!|d4t t#|dt#d5|d6zz S|d7s|d8kry|d8}t|tsJd|d9t|t$j|dd:z t$jj;}d<|d=S|d>vrt ||S|d?kr|d?}t|tsJd|d@t||dAz}|dAzdBz}t$jjt%j||Cz}d<|dDS|dEkrs|dE}t|ttfsJd|dFt|t%jdGdHdHt%j|Iz}d<|dJS|dKkrn|dK} t| tsJd|dLt| t5| }!dMdN|!D}"d<|"dOS|dPks|dQkrK| dQ| dPdR}#t t9j|#SdS|dT|}t|dU|dV||}t|)WaRecursively convert a Polars expression tree (as JSON) to a SQL string. Parameters: tree (dict): JSON-deserialized expression tree from Polars Returns: str: SQL expression string Example: Input tree: { "BinaryExpr": { "left": { "Column": "foo" }, "op": "Gt", "right": { "Literal": { "Int": 5 } } } } Output: "(foo > 5)" BinaryExprzA z should be a dict but got leftrrightz LHS of a z The op of a z should be a str but got z RHS of a ( )ColumnzThe col name of a )LiteralDynIntz4The value of an Int should be an int or str but got Floatz;The value of a Float should be a float, int or str but got Functioninputz. should have a list of dicts as input but got rfunctionz. should have a function dict as input but got BooleanIsNullz IS NULL) IsNotNullz IS NOT NULL)z Boolean function not supported: zUnsupported function type: CastoptionsStrictexprr>z;Strict cast on non-literal expression cannot be pushed down NonStrictz9Only NonStrict/Strict casts can be safely unwrapped, got Scalardtypevaluez" should have a str dtype but got z" should have a dict value but got z {'Decimal'rz. should be a two or three member list but got z member list z {'Datetime'Datetimez% should be a one member list but got i@B)tz'z '::TIMESTAMP) Int8Int16Int32Int64Int128UInt8UInt16UInt32UInt64UInt128Float32Float64rETimez should be an int but got iʚ;i)seconds microsecondsz'::TIMEDatez should be a number but got i)daysz'::DATEBinaryz should be a list but got c3"K|] }d|dV dS)z\x02xN).0bs r z"_pl_tree_to_sql..s*AAmAmmmAAAAAAr5z'::BLOBString StringOwnedNzUnsupported scalar type z , with value z Node type: z is not implemented. )keys isinstancedicttyperrr.r4intfloatlistr-getnextiter startswithlenrdatetime fromtimestamptimezoneutcmin timedeltatimedatebytesjoinrConstantExpression)$r node_type bin_expr_treelhsrrhscol_nameval_tree int_literal float_literal func_treeinputs input_tree func_dictfuncarg_sqlmsg cast_treerI cast_expr scalar_treerNrO decimal_valuemicros dt_timestamp nanosecondsrdredt_timedays_since_epochr bin_value binary_datar3 string_vals$ rrrQs ())++KYL  Y -..oo0oY0o0oZ^_lZmZm0o0ooo.$V,mD.A=QXCYR#t$$bb&b)&b&bW[\_W`W`&b&bbb$"c""aa$a9$a$aW[\^W_W_$a$aaa"#t$$bb&b)&b&bW[\_W`W`&b&bbb$\?3''\\*>r*B*B\\_UXEYEY\\\\H ?(C((ss*sy*s*scghpcqcq*s*sss(%h///&&& ?(D))ee+e +e+eUYZbUcUc+e+eee)x(((E9o +Sz22  V4 CTCT V V  2;GY -%c):;;  _$}J]J] _ _  ;=!!!JO )T**gg,g,g,gVZ[dVeVe,g,ggg*7#&$''uu)ui)u)ugklrgsgs)u)uuu'AY *d++  \ \ \$zJZJZ \ \  +j) )T**  [ [ [$y// [ [  *  ! !Y'D%fQi00Gx-7----{""171111;T;;C%c** *7I77!#&&&FO )T**gg,g,g,gVZ[dVeVe,g,ggg*-- ** h  " fb11Ii.. /)92L2LS)#...3M # #YgYYC%c** *f% )T**gg,g,g,gVZ[dVeVe,g,ggg*y)))H9o +t,,kk.k9.k.kX\]hXiXi.k.kkk, k ! !g&<&< G,--E(EEk..001122EE%%%ff'fI'f'fY]^cYdYd'f'fff%%&&gg(gY(g(gZ^_dZeZe(g(ggg&   L ) ) UUi-?-?!),MmT22  _U__$}J]J]__  2M**////a/////jUjj#mJ\J\jjj0//w}Q/0072rAR;R3S3SSTT T   M * * 4ez.A.A:&Ffd++ l l-l%-l-l^bci^j^j-l-l l l+#,::6!9y;PU]UfUj:kkL3|333 3    uU|$$ $ F??-Kk3// j j1je1j1jW[\gWhWh1j1j j j/!]2G'-7EAL(,x/A'`l/m/m/mmssuuG'w''' ' F??$V} . ==  PUPP=M8N8NPP  ==q!,,x/AGW/X/X/XXD$t$$$ $ H  hIi.. g g0gU0g0gVZ[dVeVe0g0g g g. **KggAA[AAAAAG'w''' ' H   6 6=%))Hd2K2KLLJv0<<== =FFFuFF!#&&& I I IY I IC c " ""r5relationduckdb.DuckDBPyRelationschemapl.schema.Schema pl.LazyFramec2d fd }t|| S) zA polars IO plugin for DuckDB. with_columnslist[str] | Noner pl.Expr | Nonen_rows int | None batch_sizer Iterator[pl.DataFrame]c3Kd} }|=dtt|}||}|||}|Ft jtt5t|}dddn #1swxYwY|| |}|| n| |}t|j dD]F}|,|*tj| |V0tj|VGdS)N,)rmapr4projectlimit contextlibsuppressAssertionErrorr,rfilterto_arrow_readerr|read_next_batchpl from_arrow) rr rrduck_predicaterelation_finalcolsresults record_batchrs rsource_generatorz'duckdb_source..source_generators !  #88C 6 EEFFD+33D99N  +11&99N  $^X>> E E!9)!D!D E E E E E E E E E E E E E E E  %+22>BBN6@6H.00222nNlNlmwNxNx !8$?? 2 2L$)?mL1188CCCCCCmL111111  2 2s?BB"B)r) rrr rrrrrr rr)rrrs` r duckdb_sourcers7222222: .v > > >>r5)r r r r )rrr r)r/rr r)rrr r)rrrrr r) __future__rrrrtypingdecimalrpolarsrpolars.io.pluginsrr TYPE_CHECKINGcollections.abcrtyping_extensionsDictrUnionrwAnyr__annotations__rr.r4rrrmr5rrsI""""""" 000000  ((((((/5{3 SRUWhjpjtMt@u;u/vvvvv4&&&&,C#C#C#C#L ? ? ? ? ? ?r5