#   Copyright 2011-2015 Quickstep Technologies LLC.
#   Copyright 2016 Pivotal Software, Inc.
#
#   Licensed 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.

# Name of index is required
CREATE INDEX ON test
--
ERROR: syntax error (1 : 14)
CREATE INDEX ON test
             ^
==

# Empty-column list is not allowed
CREATE INDEX test ON test ()
--
ERROR: syntax error (1 : 28)
CREATE INDEX test ON test ()
                           ^
==

# Type of index is required
CREATE INDEX test ON test
--
ERROR: syntax error (1 : 26)
CREATE INDEX test ON test
                         ^
==

# Currently supported indexes (bloom_filter)
CREATE INDEX test ON test USING arbitrary
--
ERROR: syntax error (1 : 33)
CREATE INDEX test ON test USING arbitrary
                                ^
==

# Check support for Bloom Filter index
CREATE INDEX test ON test USING BLOOMFILTER
--
ERROR: Bloom Filter Index is not supported yet (1 : 33)
CREATE INDEX test ON test USING BLOOMFILTER
                                ^
==

# Check support for CSB Tree index
CREATE INDEX test ON test USING CSBTREE
--
ERROR: CSB Tree Index is not supported yet (1 : 33)
CREATE INDEX test ON test USING CSBTREE
                                ^
==
