1
0
Fork 0
sqlglot/sqlglot/time.py
Daniel Baumann 527597d2af
Adding upstream version 6.0.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-13 06:15:54 +01:00

45 lines
1.1 KiB
Python

# the generic time format is based on python time.strftime
# https://docs.python.org/3/library/time.html#time.strftime
from sqlglot.trie import in_trie, new_trie
def format_time(string, mapping, trie=None):
"""
Converts a time string given a mapping.
Examples:
>>> format_time("%Y", {"%Y": "YYYY"})
'YYYY'
mapping: Dictionary of time format to target time format
trie: Optional trie, can be passed in for performance
"""
start = 0
end = 1
size = len(string)
trie = trie or new_trie(mapping)
current = trie
chunks = []
sym = None
while end <= size:
chars = string[start:end]
result, current = in_trie(current, chars[-1])
if result == 0:
if sym:
end -= 1
chars = sym
sym = None
start += len(chars)
chunks.append(chars)
current = trie
elif result == 2:
sym = chars
end += 1
if result and end > size:
chunks.append(chars)
return "".join(mapping.get(chars, chars) for chars in chunks)