Skip to content

Commit 01f61c5

Browse files
committedJul 6, 2016
[oracle] Implement provider test suite
On behalf of Faunalia, sponsored by ENEL (cherry-picked from 38e65c3)
1 parent 012a29d commit 01f61c5

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed
 

‎tests/src/python/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
SET (ENABLE_MSSQLTEST FALSE CACHE BOOL "Enable MsSQL provider tests")
2+
SET (ENABLE_ORACLETEST FALSE CACHE BOOL "Enable Oracle provider tests")
23

34
INCLUDE(UsePythonTest)
45
# Run one of the two server tests at the beginning so they don't run in
@@ -97,6 +98,10 @@ IF (ENABLE_MSSQLTEST)
9798
ADD_PYTHON_TEST(PyQgsMssqlProvider test_provider_mssql.py)
9899
ENDIF (ENABLE_MSSQLTEST)
99100

101+
IF (ENABLE_ORACLETEST)
102+
ADD_PYTHON_TEST(PyQgsOracleProvider test_provider_oracle.py)
103+
ENDIF (ENABLE_ORACLETEST)
104+
100105
IF (WITH_APIDOC)
101106
ADD_PYTHON_TEST(PyQgsDocCoverage test_qgsdoccoverage.py)
102107
ADD_PYTHON_TEST(PyQgsSipCoverage test_qgssipcoverage.py)
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# -*- coding: utf-8 -*-
2+
"""QGIS Unit tests for the Oracle provider.
3+
4+
.. note:: This program is free software; you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation; either version 2 of the License, or
7+
(at your option) any later version.
8+
"""
9+
__author__ = 'Nyall Dawson'
10+
__date__ = '2016-07-06'
11+
__copyright__ = 'Copyright 2016, The QGIS Project'
12+
# This will get replaced with a git SHA1 when you do a git archive
13+
__revision__ = '$Format:%H$'
14+
15+
import qgis # NOQA
16+
17+
import os
18+
19+
from qgis.core import QgsVectorLayer, QgsFeatureRequest
20+
21+
from qgis.PyQt.QtCore import QSettings, QDate, QTime, QDateTime, QVariant
22+
23+
from utilities import unitTestDataPath
24+
from qgis.testing import start_app, unittest
25+
from providertestbase import ProviderTestCase
26+
27+
start_app()
28+
TEST_DATA_DIR = unitTestDataPath()
29+
30+
31+
class TestPyQgsOracleProvider(unittest.TestCase, ProviderTestCase):
32+
33+
@classmethod
34+
def setUpClass(cls):
35+
"""Run before all tests"""
36+
cls.dbconn = u"host=localhost port=1521 user='QGIS' password='qgis'"
37+
if 'QGIS_ORACLETEST_DB' in os.environ:
38+
cls.dbconn = os.environ['QGIS_ORACLETEST_DB']
39+
# Create test layers
40+
cls.vl = QgsVectorLayer(
41+
cls.dbconn + ' sslmode=disable key=\'pk\' srid=4326 type=POINT table="QGIS"."SOME_DATA" (GEOM) sql=', 'test', 'oracle')
42+
assert(cls.vl.isValid())
43+
cls.provider = cls.vl.dataProvider()
44+
cls.poly_vl = QgsVectorLayer(
45+
cls.dbconn + ' sslmode=disable key=\'pk\' srid=4326 type=POLYGON table="QGIS"."SOME_POLY_DATA" (GEOM) sql=', 'test', 'oracle')
46+
assert(cls.poly_vl.isValid())
47+
cls.poly_provider = cls.poly_vl.dataProvider()
48+
49+
@classmethod
50+
def tearDownClass(cls):
51+
"""Run after all tests"""
52+
53+
def enableCompiler(self):
54+
QSettings().setValue(u'/qgis/compileExpressions', True)
55+
56+
def disableCompiler(self):
57+
QSettings().setValue(u'/qgis/compileExpressions', False)
58+
59+
def uncompiledFilters(self):
60+
filters = set([
61+
'(name = \'Apple\') is not null',
62+
'"name" || \' \' || "name" = \'Orange Orange\'',
63+
'"name" || \' \' || "cnt" = \'Orange 100\'',
64+
'\'x\' || "name" IS NOT NULL',
65+
'\'x\' || "name" IS NULL',
66+
'false and NULL',
67+
'true and NULL',
68+
'NULL and false',
69+
'NULL and true',
70+
'NULL and NULL',
71+
'false or NULL',
72+
'true or NULL',
73+
'NULL or false',
74+
'NULL or true',
75+
'NULL or NULL',
76+
'not null',
77+
'intersects($geometry,geom_from_wkt( \'Polygon ((-72.2 66.1, -65.2 66.1, -65.2 72.0, -72.2 72.0, -72.2 66.1))\'))'])
78+
return filters
79+
80+
if __name__ == '__main__':
81+
unittest.main()
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
CREATE TABLE QGIS.SOME_DATA ( "pk" INTEGER PRIMARY KEY, "cnt" INTEGER, "name" VARCHAR2(100) DEFAULT 'qgis', "name2" VARCHAR2(100) DEFAULT 'qgis', "num_char" VARCHAR2(100), GEOM SDO_GEOMETRY);
2+
3+
INSERT INTO QGIS.SOME_DATA ("pk", "cnt", "name", "name2", "num_char", GEOM)
4+
SELECT 5, -200, NULL, 'NuLl', '5', SDO_GEOMETRY( 2001,4326,SDO_POINT_TYPE(-71.123, 78.23, NULL), NULL, NULL) from dual
5+
UNION ALL SELECT 3, 300, 'Pear', 'PEaR', '3', NULL from dual
6+
UNION ALL SELECT 1, 100, 'Orange', 'oranGe', '1', SDO_GEOMETRY( 2001,4326,SDO_POINT_TYPE(-70.332, 66.33, NULL), NULL, NULL) from dual
7+
UNION ALL SELECT 2, 200, 'Apple', 'Apple', '2', SDO_GEOMETRY( 2001,4326,SDO_POINT_TYPE(-68.2, 70.8, NULL), NULL, NULL) from dual
8+
UNION ALL SELECT 4, 400, 'Honey', 'Honey', '4', SDO_GEOMETRY( 2001,4326,SDO_POINT_TYPE(-65.32, 78.3, NULL), NULL, NULL) from dual;
9+
10+
INSERT INTO user_sdo_geom_metadata (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ( 'SOME_DATA', 'GEOM', sdo_dim_array(sdo_dim_element('X',-75,-55,0.005),sdo_dim_element('Y',65,85,0.005)),4326);
11+
12+
CREATE INDEX some_data_spatial_idx ON QGIS.SOME_DATA(GEOM) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
13+
14+
CREATE TABLE QGIS.SOME_POLY_DATA ( "pk" INTEGER PRIMARY KEY, GEOM SDO_GEOMETRY);
15+
16+
INSERT INTO QGIS.SOME_POLY_DATA ("pk", GEOM)
17+
SELECT 1, SDO_GEOMETRY( 2003,4326,NULL, SDO_ELEM_INFO_ARRAY(1,1003,1), SDO_ORDINATE_ARRAY(-69.0,81.4 , -69.0,80.2 , -73.7,80.2 , -73.7,76.3 , -74.9,76.3 , -74.9,81.4 , -69.0,81.4)) from dual
18+
UNION ALL SELECT 2, SDO_GEOMETRY( 2003,4326,NULL, SDO_ELEM_INFO_ARRAY(1,1003,1), SDO_ORDINATE_ARRAY(-67.6,81.2 , -66.3,81.2 , -66.3,76.9 , -67.6,76.9 , -67.6,81.2))from dual
19+
UNION ALL SELECT 3, SDO_GEOMETRY( 2003,4326,NULL, SDO_ELEM_INFO_ARRAY(1,1003,1), SDO_ORDINATE_ARRAY(-68.4,75.8 , -67.5,72.6 , -68.6,73.7 , -70.2,72.9 , -68.4,75.8)) from dual
20+
UNION ALL SELECT 4, NULL from dual;
21+
22+
23+
INSERT INTO user_sdo_geom_metadata (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ( 'SOME_POLY_DATA', 'GEOM', sdo_dim_array(sdo_dim_element('X',-80,-55,0.005),sdo_dim_element('Y',65,85,0.005)),4326);
24+
25+
CREATE INDEX some_poly_data_spatial_idx ON QGIS.SOME_POLY_DATA(GEOM) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
26+

0 commit comments

Comments
 (0)
Please sign in to comment.