(root)/
Python-3.12.0/
PC/
clinic/
_msi.c.h
       1  /*[clinic input]
       2  preserve
       3  [clinic start generated code]*/
       4  
       5  #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
       6  #  include "pycore_gc.h"            // PyGC_Head
       7  #  include "pycore_runtime.h"       // _Py_ID()
       8  #endif
       9  
      10  
      11  PyDoc_STRVAR(_msi_UuidCreate__doc__,
      12  "UuidCreate($module, /)\n"
      13  "--\n"
      14  "\n"
      15  "Return the string representation of a new unique identifier.");
      16  
      17  #define _MSI_UUIDCREATE_METHODDEF    \
      18      {"UuidCreate", (PyCFunction)_msi_UuidCreate, METH_NOARGS, _msi_UuidCreate__doc__},
      19  
      20  static PyObject *
      21  _msi_UuidCreate_impl(PyObject *module);
      22  
      23  static PyObject *
      24  _msi_UuidCreate(PyObject *module, PyObject *Py_UNUSED(ignored))
      25  {
      26      return _msi_UuidCreate_impl(module);
      27  }
      28  
      29  PyDoc_STRVAR(_msi_FCICreate__doc__,
      30  "FCICreate($module, cabname, files, /)\n"
      31  "--\n"
      32  "\n"
      33  "Create a new CAB file.\n"
      34  "\n"
      35  "  cabname\n"
      36  "    the name of the CAB file\n"
      37  "  files\n"
      38  "    a list of tuples, each containing the name of the file on disk,\n"
      39  "    and the name of the file inside the CAB file");
      40  
      41  #define _MSI_FCICREATE_METHODDEF    \
      42      {"FCICreate", _PyCFunction_CAST(_msi_FCICreate), METH_FASTCALL, _msi_FCICreate__doc__},
      43  
      44  static PyObject *
      45  _msi_FCICreate_impl(PyObject *module, const char *cabname, PyObject *files);
      46  
      47  static PyObject *
      48  _msi_FCICreate(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
      49  {
      50      PyObject *return_value = NULL;
      51      const char *cabname;
      52      PyObject *files;
      53  
      54      if (!_PyArg_CheckPositional("FCICreate", nargs, 2, 2)) {
      55          goto exit;
      56      }
      57      if (!PyUnicode_Check(args[0])) {
      58          _PyArg_BadArgument("FCICreate", "argument 1", "str", args[0]);
      59          goto exit;
      60      }
      61      Py_ssize_t cabname_length;
      62      cabname = PyUnicode_AsUTF8AndSize(args[0], &cabname_length);
      63      if (cabname == NULL) {
      64          goto exit;
      65      }
      66      if (strlen(cabname) != (size_t)cabname_length) {
      67          PyErr_SetString(PyExc_ValueError, "embedded null character");
      68          goto exit;
      69      }
      70      files = args[1];
      71      return_value = _msi_FCICreate_impl(module, cabname, files);
      72  
      73  exit:
      74      return return_value;
      75  }
      76  
      77  PyDoc_STRVAR(_msi_Database_Close__doc__,
      78  "Close($self, /)\n"
      79  "--\n"
      80  "\n"
      81  "Close the database object.");
      82  
      83  #define _MSI_DATABASE_CLOSE_METHODDEF    \
      84      {"Close", (PyCFunction)_msi_Database_Close, METH_NOARGS, _msi_Database_Close__doc__},
      85  
      86  static PyObject *
      87  _msi_Database_Close_impl(msiobj *self);
      88  
      89  static PyObject *
      90  _msi_Database_Close(msiobj *self, PyObject *Py_UNUSED(ignored))
      91  {
      92      return _msi_Database_Close_impl(self);
      93  }
      94  
      95  PyDoc_STRVAR(_msi_Record_GetFieldCount__doc__,
      96  "GetFieldCount($self, /)\n"
      97  "--\n"
      98  "\n"
      99  "Return the number of fields of the record.");
     100  
     101  #define _MSI_RECORD_GETFIELDCOUNT_METHODDEF    \
     102      {"GetFieldCount", (PyCFunction)_msi_Record_GetFieldCount, METH_NOARGS, _msi_Record_GetFieldCount__doc__},
     103  
     104  static PyObject *
     105  _msi_Record_GetFieldCount_impl(msiobj *self);
     106  
     107  static PyObject *
     108  _msi_Record_GetFieldCount(msiobj *self, PyObject *Py_UNUSED(ignored))
     109  {
     110      return _msi_Record_GetFieldCount_impl(self);
     111  }
     112  
     113  PyDoc_STRVAR(_msi_Record_GetInteger__doc__,
     114  "GetInteger($self, field, /)\n"
     115  "--\n"
     116  "\n"
     117  "Return the value of field as an integer where possible.");
     118  
     119  #define _MSI_RECORD_GETINTEGER_METHODDEF    \
     120      {"GetInteger", (PyCFunction)_msi_Record_GetInteger, METH_O, _msi_Record_GetInteger__doc__},
     121  
     122  static PyObject *
     123  _msi_Record_GetInteger_impl(msiobj *self, unsigned int field);
     124  
     125  static PyObject *
     126  _msi_Record_GetInteger(msiobj *self, PyObject *arg)
     127  {
     128      PyObject *return_value = NULL;
     129      unsigned int field;
     130  
     131      field = (unsigned int)PyLong_AsUnsignedLongMask(arg);
     132      if (field == (unsigned int)-1 && PyErr_Occurred()) {
     133          goto exit;
     134      }
     135      return_value = _msi_Record_GetInteger_impl(self, field);
     136  
     137  exit:
     138      return return_value;
     139  }
     140  
     141  PyDoc_STRVAR(_msi_Record_GetString__doc__,
     142  "GetString($self, field, /)\n"
     143  "--\n"
     144  "\n"
     145  "Return the value of field as a string where possible.");
     146  
     147  #define _MSI_RECORD_GETSTRING_METHODDEF    \
     148      {"GetString", (PyCFunction)_msi_Record_GetString, METH_O, _msi_Record_GetString__doc__},
     149  
     150  static PyObject *
     151  _msi_Record_GetString_impl(msiobj *self, unsigned int field);
     152  
     153  static PyObject *
     154  _msi_Record_GetString(msiobj *self, PyObject *arg)
     155  {
     156      PyObject *return_value = NULL;
     157      unsigned int field;
     158  
     159      field = (unsigned int)PyLong_AsUnsignedLongMask(arg);
     160      if (field == (unsigned int)-1 && PyErr_Occurred()) {
     161          goto exit;
     162      }
     163      return_value = _msi_Record_GetString_impl(self, field);
     164  
     165  exit:
     166      return return_value;
     167  }
     168  
     169  PyDoc_STRVAR(_msi_Record_ClearData__doc__,
     170  "ClearData($self, /)\n"
     171  "--\n"
     172  "\n"
     173  "Set all fields of the record to 0.");
     174  
     175  #define _MSI_RECORD_CLEARDATA_METHODDEF    \
     176      {"ClearData", (PyCFunction)_msi_Record_ClearData, METH_NOARGS, _msi_Record_ClearData__doc__},
     177  
     178  static PyObject *
     179  _msi_Record_ClearData_impl(msiobj *self);
     180  
     181  static PyObject *
     182  _msi_Record_ClearData(msiobj *self, PyObject *Py_UNUSED(ignored))
     183  {
     184      return _msi_Record_ClearData_impl(self);
     185  }
     186  
     187  PyDoc_STRVAR(_msi_Record_SetString__doc__,
     188  "SetString($self, field, value, /)\n"
     189  "--\n"
     190  "\n"
     191  "Set field to a string value.");
     192  
     193  #define _MSI_RECORD_SETSTRING_METHODDEF    \
     194      {"SetString", _PyCFunction_CAST(_msi_Record_SetString), METH_FASTCALL, _msi_Record_SetString__doc__},
     195  
     196  static PyObject *
     197  _msi_Record_SetString_impl(msiobj *self, int field, const Py_UNICODE *value);
     198  
     199  static PyObject *
     200  _msi_Record_SetString(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
     201  {
     202      PyObject *return_value = NULL;
     203      int field;
     204      const Py_UNICODE *value = NULL;
     205  
     206      if (!_PyArg_CheckPositional("SetString", nargs, 2, 2)) {
     207          goto exit;
     208      }
     209      field = _PyLong_AsInt(args[0]);
     210      if (field == -1 && PyErr_Occurred()) {
     211          goto exit;
     212      }
     213      if (!PyUnicode_Check(args[1])) {
     214          _PyArg_BadArgument("SetString", "argument 2", "str", args[1]);
     215          goto exit;
     216      }
     217      value = PyUnicode_AsWideCharString(args[1], NULL);
     218      if (value == NULL) {
     219          goto exit;
     220      }
     221      return_value = _msi_Record_SetString_impl(self, field, value);
     222  
     223  exit:
     224      /* Cleanup for value */
     225      PyMem_Free((void *)value);
     226  
     227      return return_value;
     228  }
     229  
     230  PyDoc_STRVAR(_msi_Record_SetStream__doc__,
     231  "SetStream($self, field, value, /)\n"
     232  "--\n"
     233  "\n"
     234  "Set field to the contents of the file named value.");
     235  
     236  #define _MSI_RECORD_SETSTREAM_METHODDEF    \
     237      {"SetStream", _PyCFunction_CAST(_msi_Record_SetStream), METH_FASTCALL, _msi_Record_SetStream__doc__},
     238  
     239  static PyObject *
     240  _msi_Record_SetStream_impl(msiobj *self, int field, const Py_UNICODE *value);
     241  
     242  static PyObject *
     243  _msi_Record_SetStream(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
     244  {
     245      PyObject *return_value = NULL;
     246      int field;
     247      const Py_UNICODE *value = NULL;
     248  
     249      if (!_PyArg_CheckPositional("SetStream", nargs, 2, 2)) {
     250          goto exit;
     251      }
     252      field = _PyLong_AsInt(args[0]);
     253      if (field == -1 && PyErr_Occurred()) {
     254          goto exit;
     255      }
     256      if (!PyUnicode_Check(args[1])) {
     257          _PyArg_BadArgument("SetStream", "argument 2", "str", args[1]);
     258          goto exit;
     259      }
     260      value = PyUnicode_AsWideCharString(args[1], NULL);
     261      if (value == NULL) {
     262          goto exit;
     263      }
     264      return_value = _msi_Record_SetStream_impl(self, field, value);
     265  
     266  exit:
     267      /* Cleanup for value */
     268      PyMem_Free((void *)value);
     269  
     270      return return_value;
     271  }
     272  
     273  PyDoc_STRVAR(_msi_Record_SetInteger__doc__,
     274  "SetInteger($self, field, value, /)\n"
     275  "--\n"
     276  "\n"
     277  "Set field to an integer value.");
     278  
     279  #define _MSI_RECORD_SETINTEGER_METHODDEF    \
     280      {"SetInteger", _PyCFunction_CAST(_msi_Record_SetInteger), METH_FASTCALL, _msi_Record_SetInteger__doc__},
     281  
     282  static PyObject *
     283  _msi_Record_SetInteger_impl(msiobj *self, int field, int value);
     284  
     285  static PyObject *
     286  _msi_Record_SetInteger(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
     287  {
     288      PyObject *return_value = NULL;
     289      int field;
     290      int value;
     291  
     292      if (!_PyArg_CheckPositional("SetInteger", nargs, 2, 2)) {
     293          goto exit;
     294      }
     295      field = _PyLong_AsInt(args[0]);
     296      if (field == -1 && PyErr_Occurred()) {
     297          goto exit;
     298      }
     299      value = _PyLong_AsInt(args[1]);
     300      if (value == -1 && PyErr_Occurred()) {
     301          goto exit;
     302      }
     303      return_value = _msi_Record_SetInteger_impl(self, field, value);
     304  
     305  exit:
     306      return return_value;
     307  }
     308  
     309  PyDoc_STRVAR(_msi_SummaryInformation_GetProperty__doc__,
     310  "GetProperty($self, field, /)\n"
     311  "--\n"
     312  "\n"
     313  "Return a property of the summary.\n"
     314  "\n"
     315  "  field\n"
     316  "    the name of the property, one of the PID_* constants");
     317  
     318  #define _MSI_SUMMARYINFORMATION_GETPROPERTY_METHODDEF    \
     319      {"GetProperty", (PyCFunction)_msi_SummaryInformation_GetProperty, METH_O, _msi_SummaryInformation_GetProperty__doc__},
     320  
     321  static PyObject *
     322  _msi_SummaryInformation_GetProperty_impl(msiobj *self, int field);
     323  
     324  static PyObject *
     325  _msi_SummaryInformation_GetProperty(msiobj *self, PyObject *arg)
     326  {
     327      PyObject *return_value = NULL;
     328      int field;
     329  
     330      field = _PyLong_AsInt(arg);
     331      if (field == -1 && PyErr_Occurred()) {
     332          goto exit;
     333      }
     334      return_value = _msi_SummaryInformation_GetProperty_impl(self, field);
     335  
     336  exit:
     337      return return_value;
     338  }
     339  
     340  PyDoc_STRVAR(_msi_SummaryInformation_GetPropertyCount__doc__,
     341  "GetPropertyCount($self, /)\n"
     342  "--\n"
     343  "\n"
     344  "Return the number of summary properties.");
     345  
     346  #define _MSI_SUMMARYINFORMATION_GETPROPERTYCOUNT_METHODDEF    \
     347      {"GetPropertyCount", (PyCFunction)_msi_SummaryInformation_GetPropertyCount, METH_NOARGS, _msi_SummaryInformation_GetPropertyCount__doc__},
     348  
     349  static PyObject *
     350  _msi_SummaryInformation_GetPropertyCount_impl(msiobj *self);
     351  
     352  static PyObject *
     353  _msi_SummaryInformation_GetPropertyCount(msiobj *self, PyObject *Py_UNUSED(ignored))
     354  {
     355      return _msi_SummaryInformation_GetPropertyCount_impl(self);
     356  }
     357  
     358  PyDoc_STRVAR(_msi_SummaryInformation_SetProperty__doc__,
     359  "SetProperty($self, field, value, /)\n"
     360  "--\n"
     361  "\n"
     362  "Set a property.\n"
     363  "\n"
     364  "  field\n"
     365  "    the name of the property, one of the PID_* constants\n"
     366  "  value\n"
     367  "    the new value of the property (integer or string)");
     368  
     369  #define _MSI_SUMMARYINFORMATION_SETPROPERTY_METHODDEF    \
     370      {"SetProperty", _PyCFunction_CAST(_msi_SummaryInformation_SetProperty), METH_FASTCALL, _msi_SummaryInformation_SetProperty__doc__},
     371  
     372  static PyObject *
     373  _msi_SummaryInformation_SetProperty_impl(msiobj *self, int field,
     374                                           PyObject *data);
     375  
     376  static PyObject *
     377  _msi_SummaryInformation_SetProperty(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
     378  {
     379      PyObject *return_value = NULL;
     380      int field;
     381      PyObject *data;
     382  
     383      if (!_PyArg_CheckPositional("SetProperty", nargs, 2, 2)) {
     384          goto exit;
     385      }
     386      field = _PyLong_AsInt(args[0]);
     387      if (field == -1 && PyErr_Occurred()) {
     388          goto exit;
     389      }
     390      data = args[1];
     391      return_value = _msi_SummaryInformation_SetProperty_impl(self, field, data);
     392  
     393  exit:
     394      return return_value;
     395  }
     396  
     397  PyDoc_STRVAR(_msi_SummaryInformation_Persist__doc__,
     398  "Persist($self, /)\n"
     399  "--\n"
     400  "\n"
     401  "Write the modified properties to the summary information stream.");
     402  
     403  #define _MSI_SUMMARYINFORMATION_PERSIST_METHODDEF    \
     404      {"Persist", (PyCFunction)_msi_SummaryInformation_Persist, METH_NOARGS, _msi_SummaryInformation_Persist__doc__},
     405  
     406  static PyObject *
     407  _msi_SummaryInformation_Persist_impl(msiobj *self);
     408  
     409  static PyObject *
     410  _msi_SummaryInformation_Persist(msiobj *self, PyObject *Py_UNUSED(ignored))
     411  {
     412      return _msi_SummaryInformation_Persist_impl(self);
     413  }
     414  
     415  PyDoc_STRVAR(_msi_View_Execute__doc__,
     416  "Execute($self, params, /)\n"
     417  "--\n"
     418  "\n"
     419  "Execute the SQL query of the view.\n"
     420  "\n"
     421  "  params\n"
     422  "    a record describing actual values of the parameter tokens\n"
     423  "    in the query or None");
     424  
     425  #define _MSI_VIEW_EXECUTE_METHODDEF    \
     426      {"Execute", (PyCFunction)_msi_View_Execute, METH_O, _msi_View_Execute__doc__},
     427  
     428  PyDoc_STRVAR(_msi_View_Fetch__doc__,
     429  "Fetch($self, /)\n"
     430  "--\n"
     431  "\n"
     432  "Return a result record of the query.");
     433  
     434  #define _MSI_VIEW_FETCH_METHODDEF    \
     435      {"Fetch", (PyCFunction)_msi_View_Fetch, METH_NOARGS, _msi_View_Fetch__doc__},
     436  
     437  static PyObject *
     438  _msi_View_Fetch_impl(msiobj *self);
     439  
     440  static PyObject *
     441  _msi_View_Fetch(msiobj *self, PyObject *Py_UNUSED(ignored))
     442  {
     443      return _msi_View_Fetch_impl(self);
     444  }
     445  
     446  PyDoc_STRVAR(_msi_View_GetColumnInfo__doc__,
     447  "GetColumnInfo($self, kind, /)\n"
     448  "--\n"
     449  "\n"
     450  "Return a record describing the columns of the view.\n"
     451  "\n"
     452  "  kind\n"
     453  "    MSICOLINFO_NAMES or MSICOLINFO_TYPES");
     454  
     455  #define _MSI_VIEW_GETCOLUMNINFO_METHODDEF    \
     456      {"GetColumnInfo", (PyCFunction)_msi_View_GetColumnInfo, METH_O, _msi_View_GetColumnInfo__doc__},
     457  
     458  static PyObject *
     459  _msi_View_GetColumnInfo_impl(msiobj *self, int kind);
     460  
     461  static PyObject *
     462  _msi_View_GetColumnInfo(msiobj *self, PyObject *arg)
     463  {
     464      PyObject *return_value = NULL;
     465      int kind;
     466  
     467      kind = _PyLong_AsInt(arg);
     468      if (kind == -1 && PyErr_Occurred()) {
     469          goto exit;
     470      }
     471      return_value = _msi_View_GetColumnInfo_impl(self, kind);
     472  
     473  exit:
     474      return return_value;
     475  }
     476  
     477  PyDoc_STRVAR(_msi_View_Modify__doc__,
     478  "Modify($self, kind, data, /)\n"
     479  "--\n"
     480  "\n"
     481  "Modify the view.\n"
     482  "\n"
     483  "  kind\n"
     484  "    one of the MSIMODIFY_* constants\n"
     485  "  data\n"
     486  "    a record describing the new data");
     487  
     488  #define _MSI_VIEW_MODIFY_METHODDEF    \
     489      {"Modify", _PyCFunction_CAST(_msi_View_Modify), METH_FASTCALL, _msi_View_Modify__doc__},
     490  
     491  static PyObject *
     492  _msi_View_Modify_impl(msiobj *self, int kind, PyObject *data);
     493  
     494  static PyObject *
     495  _msi_View_Modify(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
     496  {
     497      PyObject *return_value = NULL;
     498      int kind;
     499      PyObject *data;
     500  
     501      if (!_PyArg_CheckPositional("Modify", nargs, 2, 2)) {
     502          goto exit;
     503      }
     504      kind = _PyLong_AsInt(args[0]);
     505      if (kind == -1 && PyErr_Occurred()) {
     506          goto exit;
     507      }
     508      data = args[1];
     509      return_value = _msi_View_Modify_impl(self, kind, data);
     510  
     511  exit:
     512      return return_value;
     513  }
     514  
     515  PyDoc_STRVAR(_msi_View_Close__doc__,
     516  "Close($self, /)\n"
     517  "--\n"
     518  "\n"
     519  "Close the view.");
     520  
     521  #define _MSI_VIEW_CLOSE_METHODDEF    \
     522      {"Close", (PyCFunction)_msi_View_Close, METH_NOARGS, _msi_View_Close__doc__},
     523  
     524  static PyObject *
     525  _msi_View_Close_impl(msiobj *self);
     526  
     527  static PyObject *
     528  _msi_View_Close(msiobj *self, PyObject *Py_UNUSED(ignored))
     529  {
     530      return _msi_View_Close_impl(self);
     531  }
     532  
     533  PyDoc_STRVAR(_msi_Database_OpenView__doc__,
     534  "OpenView($self, sql, /)\n"
     535  "--\n"
     536  "\n"
     537  "Return a view object.\n"
     538  "\n"
     539  "  sql\n"
     540  "    the SQL statement to execute");
     541  
     542  #define _MSI_DATABASE_OPENVIEW_METHODDEF    \
     543      {"OpenView", (PyCFunction)_msi_Database_OpenView, METH_O, _msi_Database_OpenView__doc__},
     544  
     545  static PyObject *
     546  _msi_Database_OpenView_impl(msiobj *self, const Py_UNICODE *sql);
     547  
     548  static PyObject *
     549  _msi_Database_OpenView(msiobj *self, PyObject *arg)
     550  {
     551      PyObject *return_value = NULL;
     552      const Py_UNICODE *sql = NULL;
     553  
     554      if (!PyUnicode_Check(arg)) {
     555          _PyArg_BadArgument("OpenView", "argument", "str", arg);
     556          goto exit;
     557      }
     558      sql = PyUnicode_AsWideCharString(arg, NULL);
     559      if (sql == NULL) {
     560          goto exit;
     561      }
     562      return_value = _msi_Database_OpenView_impl(self, sql);
     563  
     564  exit:
     565      /* Cleanup for sql */
     566      PyMem_Free((void *)sql);
     567  
     568      return return_value;
     569  }
     570  
     571  PyDoc_STRVAR(_msi_Database_Commit__doc__,
     572  "Commit($self, /)\n"
     573  "--\n"
     574  "\n"
     575  "Commit the changes pending in the current transaction.");
     576  
     577  #define _MSI_DATABASE_COMMIT_METHODDEF    \
     578      {"Commit", (PyCFunction)_msi_Database_Commit, METH_NOARGS, _msi_Database_Commit__doc__},
     579  
     580  static PyObject *
     581  _msi_Database_Commit_impl(msiobj *self);
     582  
     583  static PyObject *
     584  _msi_Database_Commit(msiobj *self, PyObject *Py_UNUSED(ignored))
     585  {
     586      return _msi_Database_Commit_impl(self);
     587  }
     588  
     589  PyDoc_STRVAR(_msi_Database_GetSummaryInformation__doc__,
     590  "GetSummaryInformation($self, count, /)\n"
     591  "--\n"
     592  "\n"
     593  "Return a new summary information object.\n"
     594  "\n"
     595  "  count\n"
     596  "    the maximum number of updated values");
     597  
     598  #define _MSI_DATABASE_GETSUMMARYINFORMATION_METHODDEF    \
     599      {"GetSummaryInformation", (PyCFunction)_msi_Database_GetSummaryInformation, METH_O, _msi_Database_GetSummaryInformation__doc__},
     600  
     601  static PyObject *
     602  _msi_Database_GetSummaryInformation_impl(msiobj *self, int count);
     603  
     604  static PyObject *
     605  _msi_Database_GetSummaryInformation(msiobj *self, PyObject *arg)
     606  {
     607      PyObject *return_value = NULL;
     608      int count;
     609  
     610      count = _PyLong_AsInt(arg);
     611      if (count == -1 && PyErr_Occurred()) {
     612          goto exit;
     613      }
     614      return_value = _msi_Database_GetSummaryInformation_impl(self, count);
     615  
     616  exit:
     617      return return_value;
     618  }
     619  
     620  PyDoc_STRVAR(_msi_OpenDatabase__doc__,
     621  "OpenDatabase($module, path, persist, /)\n"
     622  "--\n"
     623  "\n"
     624  "Return a new database object.\n"
     625  "\n"
     626  "  path\n"
     627  "    the file name of the MSI file\n"
     628  "  persist\n"
     629  "    the persistence mode");
     630  
     631  #define _MSI_OPENDATABASE_METHODDEF    \
     632      {"OpenDatabase", _PyCFunction_CAST(_msi_OpenDatabase), METH_FASTCALL, _msi_OpenDatabase__doc__},
     633  
     634  static PyObject *
     635  _msi_OpenDatabase_impl(PyObject *module, const Py_UNICODE *path, int persist);
     636  
     637  static PyObject *
     638  _msi_OpenDatabase(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     639  {
     640      PyObject *return_value = NULL;
     641      const Py_UNICODE *path = NULL;
     642      int persist;
     643  
     644      if (!_PyArg_CheckPositional("OpenDatabase", nargs, 2, 2)) {
     645          goto exit;
     646      }
     647      if (!PyUnicode_Check(args[0])) {
     648          _PyArg_BadArgument("OpenDatabase", "argument 1", "str", args[0]);
     649          goto exit;
     650      }
     651      path = PyUnicode_AsWideCharString(args[0], NULL);
     652      if (path == NULL) {
     653          goto exit;
     654      }
     655      persist = _PyLong_AsInt(args[1]);
     656      if (persist == -1 && PyErr_Occurred()) {
     657          goto exit;
     658      }
     659      return_value = _msi_OpenDatabase_impl(module, path, persist);
     660  
     661  exit:
     662      /* Cleanup for path */
     663      PyMem_Free((void *)path);
     664  
     665      return return_value;
     666  }
     667  
     668  PyDoc_STRVAR(_msi_CreateRecord__doc__,
     669  "CreateRecord($module, count, /)\n"
     670  "--\n"
     671  "\n"
     672  "Return a new record object.\n"
     673  "\n"
     674  "  count\n"
     675  "    the number of fields of the record");
     676  
     677  #define _MSI_CREATERECORD_METHODDEF    \
     678      {"CreateRecord", (PyCFunction)_msi_CreateRecord, METH_O, _msi_CreateRecord__doc__},
     679  
     680  static PyObject *
     681  _msi_CreateRecord_impl(PyObject *module, int count);
     682  
     683  static PyObject *
     684  _msi_CreateRecord(PyObject *module, PyObject *arg)
     685  {
     686      PyObject *return_value = NULL;
     687      int count;
     688  
     689      count = _PyLong_AsInt(arg);
     690      if (count == -1 && PyErr_Occurred()) {
     691          goto exit;
     692      }
     693      return_value = _msi_CreateRecord_impl(module, count);
     694  
     695  exit:
     696      return return_value;
     697  }
     698  /*[clinic end generated code: output=7d083c61679eed83 input=a9049054013a1b77]*/