Skip to content

Commit 6cc5d0a

Browse files
committed
refactor integer_label_to_datetime_op
1 parent 2d2ebb4 commit 6cc5d0a

File tree

1 file changed

+18
-25
lines changed

1 file changed

+18
-25
lines changed

bigframes/core/compile/sqlglot/expressions/datetime_ops.py

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,25 @@ def integer_label_to_datetime_op(
438438
# Determine if the frequency is fixed by checking if 'op.freq.nanos' is defined.
439439
try:
440440
return _integer_label_to_datetime_op_fixed_frequency(x, y, op)
441+
441442
except ValueError:
442-
return _integer_label_to_datetime_op_non_fixed_frequency(x, y, op)
443+
# Non-fixed frequency conversions for units ranging from weeks to years.
444+
rule_code = op.freq.rule_code
445+
446+
if rule_code == "W-SUN":
447+
return _integer_label_to_datetime_op_weekly_freq(x, y, op)
448+
449+
if rule_code in ("ME", "M"):
450+
return _integer_label_to_datetime_op_monthly_freq(x, y, op)
451+
452+
if rule_code in ("QE-DEC", "Q-DEC"):
453+
return _integer_label_to_datetime_op_quarterly_freq(x, y, op)
454+
455+
if rule_code in ("YE-DEC", "A-DEC", "Y-DEC"):
456+
return _integer_label_to_datetime_op_yearly_freq(x, y, op)
457+
458+
# If the rule_code is not recognized, raise an error here.
459+
raise ValueError(f"Unsupported frequency rule code: {rule_code}")
443460

444461

445462
def _integer_label_to_datetime_op_fixed_frequency(
@@ -470,30 +487,6 @@ def _integer_label_to_datetime_op_fixed_frequency(
470487
return x_label
471488

472489

473-
def _integer_label_to_datetime_op_non_fixed_frequency(
474-
x: TypedExpr, y: TypedExpr, op: ops.IntegerLabelToDatetimeOp
475-
) -> sge.Expression:
476-
"""
477-
This function handles non-fixed frequency conversions for units ranging
478-
from weeks to years.
479-
"""
480-
rule_code = op.freq.rule_code
481-
482-
if rule_code == "W-SUN":
483-
return _integer_label_to_datetime_op_weekly_freq(x, y, op)
484-
485-
if rule_code in ("ME", "M"):
486-
return _integer_label_to_datetime_op_monthly_freq(x, y, op)
487-
488-
if rule_code in ("QE-DEC", "Q-DEC"):
489-
return _integer_label_to_datetime_op_quarterly_freq(x, y, op)
490-
491-
if rule_code in ("YE-DEC", "A-DEC", "Y-DEC"):
492-
return _integer_label_to_datetime_op_yearly_freq(x, y, op)
493-
494-
raise ValueError(rule_code)
495-
496-
497490
def _integer_label_to_datetime_op_weekly_freq(
498491
x: TypedExpr, y: TypedExpr, op: ops.IntegerLabelToDatetimeOp
499492
) -> sge.Expression:

0 commit comments

Comments
 (0)