<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.sw-soft.com/webservices/vza/3.0.0/sql" xmlns:vzap="http://www.sw-soft.com/webservices/vza/3.0.0/protocol" xmlns:vzat="http://www.sw-soft.com/webservices/vza/3.0.0/types" xmlns="http://www.sw-soft.com/webservices/vza/3.0.0/sql" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xs:import namespace="http://www.sw-soft.com/webservices/vza/3.0.0/types" schemaLocation="VZACommonTypes.xsd"/>
	<xs:import namespace="http://www.sw-soft.com/webservices/vza/3.0.0/protocol" schemaLocation="VZAProtocol.xsd"/>
	<xs:element name="sql" type="sqlType" substitutionGroup="vzap:operator">
		<xs:annotation>
			<xs:documentation>SQL Management.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="sqlType" mixed="false">
		<xs:annotation>
			<xs:documentation>SQL Management.</xs:documentation>
		</xs:annotation>
		<xs:complexContent mixed="false">
			<xs:extension base="vzap:operator_functionalType">
				<xs:choice>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:annotation>
							<xs:documentation>Input</xs:documentation>
						</xs:annotation>
						<xs:element ref="select" minOccurs="0" maxOccurs="unbounded"/>
					</xs:choice>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:annotation>
							<xs:documentation>Output</xs:documentation>
						</xs:annotation>
						<xs:element ref="row_set" minOccurs="0" maxOccurs="unbounded"/>
					</xs:choice>
				</xs:choice>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="param_nameType">
		<xs:annotation>
			<xs:documentation>Parameter name structure.</xs:documentation>
		</xs:annotation>
		<xs:choice>
			<xs:element name="name" type="xs:string" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Name of parameter.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="param" type="param_nameType" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Subtree of parameter's names.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="param_valueType">
		<xs:annotation>
			<xs:documentation>Parameter value structure.</xs:documentation>
		</xs:annotation>
		<xs:choice>
			<xs:element name="value" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Value of parameter.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="param" type="param_valueType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Subtree of parameter's values.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="row_setType">
		<xs:annotation>
			<xs:documentation>Result set of rows structure.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="param" type="param_nameType" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>List of parameter’s names in the same order, as the one, used for "row/param" values.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="row" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>List of parameter's values in order, specified by "row_set/param".</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="param" type="param_valueType" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>List of parameters.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="dummy" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Dummy element, adder for SOAP compatibility (workaround for .Net parser bug)</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="count" type="xs:int" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Number of rows.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="select">
		<xs:annotation>
			<xs:documentation>Execute SQL select statement. Returns "row"s or Error.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="field" type="xs:string" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Fields to retrieve.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="where" type="xs:base64Binary" minOccurs="0">
					<xs:annotation>
						<xs:documentation>"Where" condition in terms of fields and SQL syntax.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="sort" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>"Sort" condition.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="field" type="xs:string">
								<xs:annotation>
									<xs:documentation>Field to sort by.</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="descending" minOccurs="0">
								<xs:annotation>
									<xs:documentation>Order of sorting if present. Otherwise ascending.</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="limit" minOccurs="0">
					<xs:annotation>
						<xs:documentation>"Limit" condition.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="size">
								<xs:annotation>
									<xs:documentation>Limit of records</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:simpleContent>
										<xs:extension base="xs:int"/>
									</xs:simpleContent>
								</xs:complexType>
							</xs:element>
							<xs:element name="offset" type="xs:int" minOccurs="0">
								<xs:annotation>
									<xs:documentation>The offset of the first row to return.</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="count" type="xs:boolean" minOccurs="0">
					<xs:annotation>
						<xs:documentation>If set to "1" returns rows and number of rows, if set to "0" returns only number of rows.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="row_set" type="row_setType">
		<xs:annotation>
			<xs:documentation>Result set of rows.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="selectResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="row_set"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="rowType">
		<xs:sequence>
			<xs:element name="param" type="param_valueType" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>List of parameters.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="dummy" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="row" type="rowType">
		<xs:annotation>
			<xs:documentation>List of parameter's values in order, specified by "row_set/param".</xs:documentation>
		</xs:annotation>
	</xs:element>
</xs:schema>
