cast.sql 1.2 KB

123456789101112131415161718192021222324252627
  1. -- Copyright Materialize, Inc. and contributors. All rights reserved.
  2. --
  3. -- Licensed under the Apache License, Version 2.0 (the "License");
  4. -- you may not use this file except in compliance with the License.
  5. -- You may obtain a copy of the License in the LICENSE file at the
  6. -- root of this repository, or online at
  7. --
  8. -- http://www.apache.org/licenses/LICENSE-2.0
  9. --
  10. -- Unless required by applicable law or agreed to in writing, software
  11. -- distributed under the License is distributed on an "AS IS" BASIS,
  12. -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. -- See the License for the specific language governing permissions and
  14. -- limitations under the License.
  15. {% macro materialize__cast(expression, data_type) -%}
  16. {#-- Handle types that don't support cast(NULL as type) --#}
  17. {%- if expression.strip().lower() == "null" and data_type.strip().lower() == "map" -%}
  18. NULL::map[text => text]
  19. {%- elif expression.strip().lower() == "null" and data_type.strip().lower() == "list" -%}
  20. NULL::text list
  21. {%- elif expression.strip().lower() == "null" and data_type.strip().lower() == "record" -%}
  22. (SELECT row() WHERE false)
  23. {%- else -%}
  24. cast({{ expression }} as {{ data_type }})
  25. {%- endif -%}
  26. {%- endmacro %}