<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
/**
  * 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.
  */
-->
<xs:schema version="1.0" targetNamespace="http://openejb.apache.org/xml/ns/pkgen-2.1" xmlns:tns="http://openejb.apache.org/xml/ns/pkgen-2.1" xmlns:ns1="http://openejb.apache.org/xml/ns/openejb-jar-2.2" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="key-generator" nillable="true" type="tns:key-generatorType"/>

  <xs:complexType name="auto-increment-tableType">
    <xs:sequence>
      <xs:element name="sql" type="xs:string" form="qualified"/>
      <xs:element name="return-type" type="xs:string" form="qualified"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="sequence-tableType">
    <xs:sequence>
      <xs:element name="table-name" type="xs:string" form="qualified"/>
      <xs:element name="sequence-name" type="xs:string" form="qualified"/>
      <xs:element name="batch-size" type="xs:int" form="qualified"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="sql-generatorType">
    <xs:sequence>
      <xs:element name="sql" type="xs:string" form="qualified"/>
      <xs:element name="return-type" type="xs:string" form="qualified"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="custom-generatorType">
    <xs:sequence>
      <xs:element name="generator-name" type="xs:string" form="qualified"/>
      <xs:element name="primary-key-class" type="xs:string" form="qualified"/>
    </xs:sequence>
  </xs:complexType>


  <xs:complexType name="emptyType" />

  <xs:complexType name="key-generatorType">
    <xs:sequence>
      <xs:element name="uuid" type="tns:emptyType" form="qualified" minOccurs="0"/>
      <xs:element name="sequence-table" type="tns:sequence-tableType" form="qualified" minOccurs="0"/>
      <xs:element name="auto-increment-table" type="tns:auto-increment-tableType" form="qualified" minOccurs="0"/>
      <xs:element name="sql-generator" type="tns:sql-generatorType" form="qualified" minOccurs="0"/>
      <xs:element name="custom-generator" type="tns:custom-generatorType" form="qualified" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="database-generatedType">
    <xs:sequence>
      <xs:element name="identity-column" type="xs:string" form="qualified" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
