# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[default optimized_logical_plan]
CREATE TABLE foo (attr int) WITH BLOCKPROPERTIES (TYPE split_rowstore, BLOCKSIZEMB 10)
--
TopLevelPlan
+-plan=CreateTable[relation=foo]
| +-block_properties=ProtoDescription
| | +-Property=ProtoProperty[Property=blocktype,Value=split_rowstore]
| | +-Property=ProtoProperty[Property=slots,Value=5]
| +-attributes=
|   +-AttributeReference[id=0,name=attr,relation=foo,type=Int]
+-output_attributes=
  +-AttributeReference[id=0,name=attr,relation=foo,type=Int]
==

CREATE TABLE foo (attr int, attr2 int) WITH BLOCKPROPERTIES
(TYPE compressed_columnstore, SORT attr, COMPRESS ALL, BLOCKSIZEMB 10)
--
TopLevelPlan
+-plan=CreateTable[relation=foo]
| +-block_properties=ProtoDescription
| | +-Property=ProtoProperty[Property=blocktype,Value=compressed_columnstore]
| | +-Property=ProtoProperty[Property=sort,Value=0]
| | +-Property=ProtoProperty[Property=compress,Value=0]
| | +-Property=ProtoProperty[Property=compress,Value=1]
| | +-Property=ProtoProperty[Property=slots,Value=5]
| +-attributes=
|   +-AttributeReference[id=0,name=attr,relation=foo,type=Int]
|   +-AttributeReference[id=1,name=attr2,relation=foo,type=Int]
+-output_attributes=
  +-AttributeReference[id=0,name=attr,relation=foo,type=Int]
  +-AttributeReference[id=1,name=attr2,relation=foo,type=Int]
==

CREATE TABLE foo (attr INT) PARTITION BY HASH(attr) PARTITIONS 4;
--
TopLevelPlan
+-plan=CreateTable[relation=foo]
| +-partition_scheme_header=ProtoDescription
| | +-Property=ProtoProperty[Property=partition_type,Value=hash]
| | +-Property=ProtoProperty[Property=num_partitions,Value=4]
| | +-Property=ProtoProperty[Property=partition_attr_id,Value=0]
| +-attributes=
|   +-AttributeReference[id=0,name=attr,relation=foo,type=Int]
+-output_attributes=
  +-AttributeReference[id=0,name=attr,relation=foo,type=Int]
==

CREATE TABLE foo (attr1 INT, attr2 LONG, attr3 FLOAT, attr4 DOUBLE, attr5 CHAR(5), attr6 VARCHAR(4))
PARTITION BY HASH(attr2, attr1, attr3, attr4, attr5, attr6) PARTITIONS 4;
--
TopLevelPlan
+-plan=CreateTable[relation=foo]
| +-partition_scheme_header=ProtoDescription
| | +-Property=ProtoProperty[Property=partition_type,Value=hash]
| | +-Property=ProtoProperty[Property=num_partitions,Value=4]
| | +-Property=ProtoProperty[Property=partition_attr_id,Value=1]
| | +-Property=ProtoProperty[Property=partition_attr_id,Value=0]
| | +-Property=ProtoProperty[Property=partition_attr_id,Value=2]
| | +-Property=ProtoProperty[Property=partition_attr_id,Value=3]
| | +-Property=ProtoProperty[Property=partition_attr_id,Value=4]
| | +-Property=ProtoProperty[Property=partition_attr_id,Value=5]
| +-attributes=
|   +-AttributeReference[id=0,name=attr1,relation=foo,type=Int]
|   +-AttributeReference[id=1,name=attr2,relation=foo,type=Long]
|   +-AttributeReference[id=2,name=attr3,relation=foo,type=Float]
|   +-AttributeReference[id=3,name=attr4,relation=foo,type=Double]
|   +-AttributeReference[id=4,name=attr5,relation=foo,type=Char(5)]
|   +-AttributeReference[id=5,name=attr6,relation=foo,type=VarChar(4)]
+-output_attributes=
  +-AttributeReference[id=0,name=attr1,relation=foo,type=Int]
  +-AttributeReference[id=1,name=attr2,relation=foo,type=Long]
  +-AttributeReference[id=2,name=attr3,relation=foo,type=Float]
  +-AttributeReference[id=3,name=attr4,relation=foo,type=Double]
  +-AttributeReference[id=4,name=attr5,relation=foo,type=Char(5)]
  +-AttributeReference[id=5,name=attr6,relation=foo,type=VarChar(4)]
