| /* |
| * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Oracle - initial API and implementation from Oracle TopLink |
| package org.eclipse.persistence.testing.tests.nls.japanese; |
| |
| import org.eclipse.persistence.testing.framework.AutoVerifyTestCase; |
| import org.eclipse.persistence.queries.*; |
| import org.eclipse.persistence.expressions.*; |
| import java.util.Vector; |
| |
| /** |
| * If SQL is generated only once, sql string should be (t0.F_NAME = NULL) when the query is executed the second time |
| * with argument null. If SQL is generated every time when the query is executed, sql string should be (t0.F_NAME is NULL). |
| */ |
| public class NLSshouldPrepareTest extends AutoVerifyTestCase { |
| private ReadObjectQuery query; |
| private ReadObjectQuery queryCopy = new ReadObjectQuery(); |
| private Vector vec = new Vector(); |
| |
| public NLSshouldPrepareTest() { |
| setDescription("[NLS_Japanese] Test SQL prepared once option"); |
| } |
| |
| @Override |
| public void reset() { |
| getSession().getIdentityMapAccessor().initializeAllIdentityMaps(); |
| } |
| |
| @Override |
| public void setup() { |
| query = (ReadObjectQuery)getSession().getDescriptor(org.eclipse.persistence.testing.tests.nls.japanese.NLSEmployee.class).getQueryManager().getQuery("shouldPrepareQuery"); |
| |
| queryCopy = (ReadObjectQuery)query.clone(); |
| ExpressionBuilder ex = new ExpressionBuilder(); |
| queryCopy.setSelectionCriteria(ex.get("firstName").equal(ex.getParameter("firstName1"))); |
| queryCopy.addArgument("firstName1"); |
| |
| vec = new Vector(); |
| //vec.add("Bob"); |
| vec.add("\u3044\u30db\u30a4"); |
| getSession().executeQuery(queryCopy, vec); |
| } |
| |
| @Override |
| public void test() { |
| vec.set(0, null); |
| getSession().executeQuery(queryCopy, vec); |
| } |
| |
| @Override |
| public void verify() { |
| //if (!queryCopy.getCall().getSQLString().equals("SELECT t0.VERSION, t1.EMP_ID, t0.L_NAME, t0.F_NAME, t1.SALARY, t0.EMP_ID, t0.GENDER, t0.END_DATE, t0.START_DATE, t0.MANAGER_ID, t0.END_TIME, t0.START_TIME, t0.ADDR_ID FROM EMPLOYEE t0, SALARY t1 WHERE ((t0.F_NAME = 'Bob') AND (t1.EMP_ID = t0.EMP_ID))")) |
| //Following works for japanese database with english data: |
| if (!queryCopy.getCall().getSQLString().equals("SELECT t0.\u306b\u304a\u3064\u3066\u3051\u305d\u305b, t1.\u304a\u3059\u305f_\u3051\u3048, t0.\u3057_\u305b\u3042\u3059\u304a, t0.\u304b_\u305b\u3042\u3059\u304a, t1.\u3066\u3042\u3057\u3042\u3064\u306e, t0.\u304a\u3059\u305f_\u3051\u3048, t0.\u304d\u304a\u305b\u3048\u304a\u3064, t0.\u304a\u305b\u3048_\u3048\u3042\u3068\u304a, t0.\u3066\u3068\u3042\u3064\u3068_\u3048\u3042\u3068\u304a, t0.\u3059\u3042\u305b\u3042\u304d\u304a\u3064_\u3051\u3048, t0.\u304a\u305b\u3048_\u3068\u3051\u3059\u304a, t0.\u3066\u3068\u3042\u3064\u3068_\u3068\u3051\u3059\u304a, t0.\u3042\u3048\u3048\u3064_\u3051\u3048 FROM \u304a\u3059\u305f t0, \u3066\u3042\u3057\u3042\u3064\u306e t1 WHERE ((t0.\u304b_\u305b\u3042\u3059\u304a = ?) AND (t1.\u304a\u3059\u305f_\u3051\u3048 = t0.\u304a\u3059\u305f_\u3051\u3048))")) { |
| throw new org.eclipse.persistence.testing.framework.TestErrorException("shouldPrepareTest failed."); |
| } |
| } |
| } |