# 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]
| +-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(attr1, attr2, attr3, attr4, attr5, attr6) PARTITIONS 4;
--
TopLevelPlan
+-plan=CreateTable[relation=foo]
| +-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)]
