1616# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
1717# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
1818# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19+
1920import datetime
2021
22+ import packaging .version
2123import pytest
2224
2325import sqlalchemy
2426
2527
28+ sqlalchemy_version = packaging .version .parse (sqlalchemy .__version__ )
29+ SQL_2_0 = sqlalchemy_version >= packaging .version .parse ("2.0" )
30+
31+
2632def _test_struct ():
2733 from sqlalchemy_bigquery import STRUCT
2834
@@ -90,9 +96,24 @@ def test_struct_traversal_project(faux_conn, expr, sql):
9096@pytest .mark .parametrize (
9197 "expr,sql" ,
9298 [
93- (_col ()["name" ] == "x" , "(`t`.`person`.name) = %(param_1:STRING)s" ),
94- (_col ()["Name" ] == "x" , "(`t`.`person`.Name) = %(param_1:STRING)s" ),
95- (_col ().NAME == "x" , "(`t`.`person`.NAME) = %(param_1:STRING)s" ),
99+ (
100+ _col ()["name" ] == "bob" ,
101+ "(`t`.`person`.name) = %(param_1:STRING)s"
102+ if not SQL_2_0
103+ else "`t`.`person`.name = %(param_1:STRING)s" ,
104+ ),
105+ (
106+ _col ()["Name" ] == "bob" ,
107+ "(`t`.`person`.Name) = %(param_1:STRING)s"
108+ if not SQL_2_0
109+ else "`t`.`person`.Name = %(param_1:STRING)s" ,
110+ ),
111+ (
112+ _col ()["NAME" ] == "bob" ,
113+ "(`t`.`person`.NAME) = %(param_1:STRING)s"
114+ if not SQL_2_0
115+ else "`t`.`person`.NAME = %(param_1:STRING)s" ,
116+ ),
96117 (
97118 _col ().children [0 ] == dict (name = "foo" , bdate = datetime .date (2020 , 1 , 1 )),
98119 "(`t`.`person`.children)[OFFSET(%(param_1:INT64)s)]"
@@ -106,11 +127,17 @@ def test_struct_traversal_project(faux_conn, expr, sql):
106127 (
107128 _col ().children [0 ]["bdate" ] == datetime .date (2021 , 8 , 30 ),
108129 "(((`t`.`person`.children)[OFFSET(%(param_1:INT64)s)]).bdate)"
130+ " = %(param_2:DATE)s"
131+ if not SQL_2_0
132+ else "((`t`.`person`.children)[OFFSET(%(param_1:INT64)s)]).bdate"
109133 " = %(param_2:DATE)s" ,
110134 ),
111135 (
112136 _col ().children [0 ].bdate == datetime .date (2021 , 8 , 30 ),
113137 "(((`t`.`person`.children)[OFFSET(%(param_1:INT64)s)]).bdate)"
138+ " = %(param_2:DATE)s"
139+ if not SQL_2_0
140+ else "((`t`.`person`.children)[OFFSET(%(param_1:INT64)s)]).bdate"
114141 " = %(param_2:DATE)s" ,
115142 ),
116143 ],
0 commit comments