<?xml version="1.0" encoding="UTF-8"?>
<!--
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt for Python.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
-->
<typesystem package="PySide2.QtSql">
  <load-typesystem name="QtWidgets/typesystem_widgets.xml" generate="no"/>

  <rejection class="QSqlDriverCreator"/>
  <rejection class="QSqlDriverPlugin"/>
  <rejection class="QSqlDriverFactoryInterface"/>

  <namespace-type name="QSql">
    <enum-type name="Location"/>
    <enum-type name="ParamTypeFlag" flags="ParamType"/>
    <enum-type name="TableType"/>
    <enum-type name="NumericalPrecisionPolicy"/>
    <extra-includes>
        <include file-name="QtSql/qtsqlglobal.h" location="global"/>
    </extra-includes>
  </namespace-type>

  <value-type name="QSqlDatabase">
    <extra-includes>
        <include file-name="QSqlQuery" location="global"/>
        <include file-name="QSqlError" location="global"/>
        <include file-name="QSqlIndex" location="global"/>
        <include file-name="QSqlRecord" location="global"/>
        <include file-name="QStringList" location="global"/>
        <include file-name="QSize" location="global"/>
    </extra-includes>
    <modify-function signature="exec(QString)const" rename="exec_" allow-thread="yes"/>
    <modify-function signature="open()" allow-thread="yes"/>
    <modify-function signature="open(const QString&amp;, const QString&amp;)" allow-thread="yes"/>
    <modify-function signature="commit()" allow-thread="yes"/>
    <modify-function signature="rollback()" allow-thread="yes"/>
    <modify-function signature="transaction()" allow-thread="yes"/>
    <modify-function signature="registerSqlDriver(const QString&amp;,QSqlDriverCreatorBase*)">
      <modify-argument index="2">
        <define-ownership owner="c++"/>
      </modify-argument>
    </modify-function>
  </value-type>

  <value-type name="QSqlQuery">
    <enum-type name="BatchExecutionMode"/>
    <extra-includes>
        <include file-name="QSqlError" location="global"/>
        <include file-name="QSqlRecord" location="global"/>
        <include file-name="QStringList" location="global"/>
        <include file-name="QSize" location="global"/>
    </extra-includes>
    <modify-function signature="exec()" rename="exec_" allow-thread="yes"/>
    <modify-function signature="exec(const QString&amp;)" rename="exec_" allow-thread="yes"/>
    <modify-function signature="prepare(const QString&amp;)" allow-thread="yes"/>
    <modify-function signature="clear()" allow-thread="yes"/>
    <modify-function signature="last()" allow-thread="yes"/>
    <modify-function signature="first()" allow-thread="yes"/>
    <modify-function signature="previous()" allow-thread="yes"/>
    <modify-function signature="next()" allow-thread="yes"/>
    <modify-function signature="seek(int,bool)" allow-thread="yes"/>
  </value-type>

  <value-type name="QSqlRecord">
    <extra-includes>
        <include file-name="QSqlField" location="global"/>
    </extra-includes>
  </value-type>

  <value-type name="QSqlError">
    <enum-type name="ErrorType"/>
  </value-type>

  <value-type name="QSqlIndex"/>

  <value-type name="QSqlRelation"/>

  <object-type name="QSqlRelationalDelegate"/>

  <value-type name="QSqlField">
      <enum-type name="RequiredStatus"/>
  </value-type>

  <object-type name="QSqlDriver">
    <enum-type name="DbmsType"/>
    <enum-type name="DriverFeature"/>
    <enum-type name="IdentifierType"/>
    <enum-type name="NotificationSource"/>
    <enum-type name="StatementType"/>
    <extra-includes>
        <include file-name="QSqlQuery" location="global"/>
        <include file-name="QSqlError" location="global"/>
        <include file-name="QSqlIndex" location="global"/>
        <include file-name="QSqlRecord" location="global"/>
        <include file-name="QStringList" location="global"/>
        <include file-name="QSize" location="global"/>
    </extra-includes>
    <modify-function signature="beginTransaction()" allow-thread="yes"/>
    <modify-function signature="commitTransaction()" allow-thread="yes"/>
    <modify-function signature="rollbackTransaction()" allow-thread="yes"/>
    <modify-function signature="open(const QString&amp;,const QString&amp;,const QString&amp;,const QString&amp;,int,const QString&amp;)" allow-thread="yes"/>
    <!-- ### This is too low level for Python, and pointer would be useless for the Python programmer -->
    <modify-function signature="handle()const" remove="all"/>
    <!-- ### -->
  </object-type>

  <object-type name="QSqlQueryModel">
    <extra-includes>
        <include file-name="QSqlError" location="global"/>
        <include file-name="QSqlQuery" location="global"/>
        <include file-name="QSqlRecord" location="global"/>
        <include file-name="QStringList" location="global"/>
        <include file-name="QSize" location="global"/>
    </extra-includes>
  </object-type>
  <object-type name="QSqlRelationalTableModel">
    <enum-type name="JoinMode"/>
    <extra-includes>
        <include file-name="QStringList" location="global"/>
        <include file-name="QSize" location="global"/>
    </extra-includes>
  </object-type>
  <object-type name="QSqlResult">
      <enum-type name="BindingSyntax"/>
      <enum-type name="VirtualHookOperation"/>
      <extra-includes>
        <include file-name="QSqlError" location="global"/>
        <include file-name="QSqlQuery" location="global"/>
        <include file-name="QSqlRecord" location="global"/>
        <include file-name="QStringList" location="global"/>
        <include file-name="QSize" location="global"/>
      </extra-includes>
      <!-- ### This isn't part of Qt public API -->
      <modify-function signature="virtual_hook(int,void*)" remove="all"/>
      <!-- ### -->
      <modify-function signature="exec()" rename="exec_" allow-thread="yes"/>
      <modify-function signature="fetchLast()" allow-thread="yes"/>
      <modify-function signature="fetchFirst()" allow-thread="yes"/>
      <modify-function signature="fetchNext()" allow-thread="yes"/>
      <modify-function signature="fetchPrevious()" allow-thread="yes"/>
      <modify-function signature="fetch(int)" allow-thread="yes"/>
      <modify-function signature="prepare(QString)" allow-thread="yes"/>
  </object-type>
  <object-type name="QSqlTableModel">
    <enum-type name="EditStrategy"/>
    <extra-includes>
        <include file-name="QSqlIndex" location="global"/>
        <include file-name="QStringList" location="global"/>
        <include file-name="QSize" location="global"/>
    </extra-includes>
  </object-type>
  <object-type name="QSqlDriverCreatorBase">
    <extra-includes>
        <include file-name="QSqlDriver" location="global"/>
    </extra-includes>
  </object-type>

</typesystem>
