mirror of
https://github.com/python/cpython
synced 2024-10-14 10:33:27 +00:00
bpo-1102: View.Fetch() now returns None when it's exhausted (GH-4459)
This commit is contained in:
parent
5ce1069a6f
commit
bdb8315c21
|
@ -1,7 +1,46 @@
|
||||||
""" Test suite for the code in msilib """
|
""" Test suite for the code in msilib """
|
||||||
import unittest
|
import unittest
|
||||||
from test.support import import_module
|
from test.support import TESTFN, import_module, unlink
|
||||||
msilib = import_module('msilib')
|
msilib = import_module('msilib')
|
||||||
|
import msilib.schema
|
||||||
|
|
||||||
|
|
||||||
|
def init_database():
|
||||||
|
path = TESTFN + '.msi'
|
||||||
|
db = msilib.init_database(
|
||||||
|
path,
|
||||||
|
msilib.schema,
|
||||||
|
'Python Tests',
|
||||||
|
'product_code',
|
||||||
|
'1.0',
|
||||||
|
'PSF',
|
||||||
|
)
|
||||||
|
return db, path
|
||||||
|
|
||||||
|
|
||||||
|
class MsiDatabaseTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_view_fetch_returns_none(self):
|
||||||
|
db, db_path = init_database()
|
||||||
|
properties = []
|
||||||
|
view = db.OpenView('SELECT Property, Value FROM Property')
|
||||||
|
view.Execute(None)
|
||||||
|
while True:
|
||||||
|
record = view.Fetch()
|
||||||
|
if record is None:
|
||||||
|
break
|
||||||
|
properties.append(record.GetString(1))
|
||||||
|
view.Close()
|
||||||
|
db.Close()
|
||||||
|
self.assertEqual(
|
||||||
|
properties,
|
||||||
|
[
|
||||||
|
'ProductName', 'ProductCode', 'ProductVersion',
|
||||||
|
'Manufacturer', 'ProductLanguage',
|
||||||
|
]
|
||||||
|
)
|
||||||
|
self.addCleanup(unlink, db_path)
|
||||||
|
|
||||||
|
|
||||||
class Test_make_id(unittest.TestCase):
|
class Test_make_id(unittest.TestCase):
|
||||||
#http://msdn.microsoft.com/en-us/library/aa369212(v=vs.85).aspx
|
#http://msdn.microsoft.com/en-us/library/aa369212(v=vs.85).aspx
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Return ``None`` when ``View.Fetch()`` returns ``ERROR_NO_MORE_ITEMS``
|
||||||
|
instead of raising ``MSIError``.
|
||||||
|
|
||||||
|
Initial patch by Anthony Tuininga.
|
|
@ -723,8 +723,12 @@ view_fetch(msiobj *view, PyObject*args)
|
||||||
int status;
|
int status;
|
||||||
MSIHANDLE result;
|
MSIHANDLE result;
|
||||||
|
|
||||||
if ((status = MsiViewFetch(view->h, &result)) != ERROR_SUCCESS)
|
status = MsiViewFetch(view->h, &result);
|
||||||
|
if (status == ERROR_NO_MORE_ITEMS) {
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
} else if (status != ERROR_SUCCESS) {
|
||||||
return msierror(status);
|
return msierror(status);
|
||||||
|
}
|
||||||
|
|
||||||
return record_new(result);
|
return record_new(result);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue