packages feed

hydra-0.5.0: src/main/haskell/Hydra/Sources/Tier4/Langs/Parquet/Delta.hs

{-# LANGUAGE OverloadedStrings #-}

module Hydra.Sources.Tier4.Langs.Parquet.Delta where

import Hydra.Sources.Tier3.All
import Hydra.Dsl.Annotations
import Hydra.Dsl.Bootstrap
import Hydra.Dsl.Types as Types


deltaParquetModule :: Module
deltaParquetModule = Module ns elements [hydraCoreModule] tier0Modules $
    Just ("A partial Delta Parquet model")
  where
    ns = Namespace "hydra/langs/parquet/delta"
    def = datatype ns
    delta = typeref ns

    elements = [
      def "ArrayType" $
        record [
          "elementType">: delta "DataType",
          "containsNull">: boolean],

      def "DataType" $
        union [
          "array">: delta "ArrayType",
          "binary">: unit,
          "boolean">: unit,
          "byte">: unit,
          "date">: unit,
          "decimal">: delta "DecimalType",
          "double">: unit,
          "float">: unit,
          "integer">: unit,
          "long">: unit,
          "map">: delta "MapType",
          "null">: unit,
          "short">: unit,
          "string">: unit,
          "struct">: delta "StructType"],

      def "DecimalType" $
        record [
          "precision">: int32,
          "scale">: int32],

      def "MapType" $
        record [
          "keyType">: delta "DataType",
          "valueType">: delta "DataType",
          "valueContainsNull">: boolean],

      def "StructField" $
        record [
          "name">: string,
          "dataType">: delta "DataType",
          "nullable">: boolean],

      def "StructType" $
        record [
          "fields">: list $ delta "StructField"]]