<!--
  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.
-->
<svg class="railroad-diagram" width="702.5" height="91" viewBox="0 0 702.5 91" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g transform="translate(.5 .5)">
        <g fill="none" stroke="black" stroke-width="2">
            <path stroke-dasharray="5,5" d="M11 40 l30 0" />
        </g>
        <path d="M40 40h10"></path>
        <g>
            <path d="M50 40h0"></path>
            <path d="M652.5 40h0"></path>
            <g>
                <path d="M50 40h0"></path>
                <path d="M574 40h0"></path>
                <g>
                    <path d="M50 40h0"></path>
                    <path d="M161 40h0"></path>
                    <path d="M50 40a10 10 0 0 0 10 -10v0a10 10 0 0 1 10 -10"></path>
                    <g>
                        <path d="M70 20h71"></path>
                    </g>
                    <path d="M141 20a10 10 0 0 1 10 10v0a10 10 0 0 0 10 10"></path>
                    <path d="M50 40h20"></path>
                    <g class="terminal ">
                        <path d="M70 40h0"></path>
                        <path d="M141 40h0"></path>
                        <rect x="70" y="29" width="71" height="22" rx="10" ry="10"></rect>
                        <text x="105.5" y="44">COLUMN</text>
                    </g>
                    <path d="M141 40h20"></path>
                </g>
                <g>
                    <path d="M161 40h0"></path>
                    <path d="M331.5 40h0"></path>
                    <path d="M161 40h20"></path>
                    <g>
                        <path d="M181 40h130.5"></path>
                    </g>
                    <path d="M311.5 40h20"></path>
                    <path d="M161 40a10 10 0 0 1 10 10v0a10 10 0 0 0 10 10"></path>
                    <g class="terminal ">
                        <path d="M181 60h0"></path>
                        <path d="M311.5 60h0"></path>
                        <rect x="181" y="49" width="130.5" height="22" rx="10" ry="10"></rect>
                        <text x="246.25" y="64">IF NOT EXISTS</text>
                    </g>
                    <path d="M311.5 60a10 10 0 0 0 10 -10v0a10 10 0 0 1 10 -10"></path>
                </g>
                <path d="M331.5 40h10"></path>
                <a xlink:href="https://ignite.apache.org/docs/3.0.0-alpha/sql-reference/ddl#column_definition_or_list">
                    <g class="non-terminal ">
                        <path d="M341.5 40h0"></path>
                        <path d="M574 40h0"></path>
                        <rect x="341.5" y="29" width="232.5" height="22"></rect>
                        <text x="457.75" y="44" fill="blue">column&#95;definition&#95;or&#95;list</text>
                    </g>
                </a>
            </g>
            <path d="M574 40h10"></path>
            <g>
                <path d="M584 40h0"></path>
                <path d="M652.5 40h0"></path>
                <path d="M584 40a10 10 0 0 0 10 -10v0a10 10 0 0 1 10 -10"></path>
                <g>
                    <path d="M604 20h28.5"></path>
                </g>
                <path d="M632.5 20a10 10 0 0 1 10 10v0a10 10 0 0 0 10 10"></path>
                <path d="M584 40h20"></path>
                <g class="terminal ">
                    <path d="M604 40h0"></path>
                    <path d="M632.5 40h0"></path>
                    <rect x="604" y="29" width="28.5" height="22" rx="10" ry="10"></rect>
                    <text x="618.25" y="44">;</text>
                </g>
                <path d="M632.5 40h20"></path>
            </g>
        </g>
        <path d="M652.5 40h10"></path>
        <path d="M 662.5 40 h 20 m -10 -10 v 20 m 10 -20 v 20"></path>
    </g>
    <style>
        svg {
        background-color: hsl(0,0%,100%);
        }
        path {
        stroke-width: 2;
        stroke: black;
        fill: rgba(0,0,0,0);
        }
        text {
        font: bold 14px monospace;
        text-anchor: middle;
        white-space: pre;
        }
        text.diagram-text {
        font-size: 12px;
        }
        text.diagram-arrow {
        font-size: 16px;
        }
        text.label {
        text-anchor: start;
        }
        text.comment {
        font: italic 12px monospace;
        }
        g.non-terminal text {
        /&#42;font-style: italic;&#42;/
        }
        rect {
        stroke-width: 2;
        stroke: black;
        fill: hsl(0,0%,100%);
        }
        rect.group-box {
        stroke: gray;
        stroke-dasharray: 10 5;
        fill: none;
        }
        path.diagram-text {
        stroke-width: ;
        stroke: black;
        fill: white;
        cursor: help;
        }
        g.diagram-text:hover path.diagram-text {
        fill: #eee;
        }</style>
</svg>
