All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.persistence.queries.ScrollableCursorPolicy Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 1998, 2024 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.queries;

import org.eclipse.persistence.internal.databaseaccess.DatabaseCall;
import org.eclipse.persistence.sessions.remote.DistributedSession;

/**
 * PUBLIC:
 * ScrollableCursorPolicy allows for additional options to be specified for ReadAllQuery or DataReadQuery.
 * These options are passed through to the JDBC result set,
 * the JDBC driver must support JDBC2 scrolling cursors and the options used.
 * Example:

* ScrollableCursorPolicy policy = new ScrollableCursorPolicy()

* policy.setResultSetType(ScrollableCursorPolicy.TYPE_SCROLL_INSENSITIVE);

* query.useScrollableCursor(policy); */ public class ScrollableCursorPolicy extends CursorPolicy { protected int resultSetType; protected int resultSetConcurrency; /* RESULT SET TYPES **/ /** JDBC 2.0 The rows in a result set will be processed in a forward direction; first-to-last. */ public static final int FETCH_FORWARD = 1000; /** JDBC 2.0 The rows in a result set will be processed in a reverse direction; last-to-first. */ public static final int FETCH_REVERSE = 1001; /** JDBC 2.0 The order in which rows in a result set will be processed is unknown. */ public static final int FETCH_UNKNOWN = 1002; /** JDBC 2.0 The type for a ResultSet object whose cursor may move only forward. */ public static final int TYPE_FORWARD_ONLY = 1003; /** JDBC 2.0 The type for a ResultSet object that is scrollable but generally not sensitive to changes made by others. */ public static final int TYPE_SCROLL_INSENSITIVE = 1004; /** JDBC 2.0 The type for a ResultSet object that is scrollable and generally sensitive to changes made by others. */ public static final int TYPE_SCROLL_SENSITIVE = 1005; /* RESULT SET CONCURRENCY */ /** JDBC 2.0 The concurrency mode for a ResultSet object that may NOT be updated. */ public static final int CONCUR_READ_ONLY = 1007; /** JDBC 2.0 The concurrency mode for a ResultSet object that may be updated. */ public static final int CONCUR_UPDATABLE = 1008; /** * PUBLIC: * Create a new scrollable cursor policy. */ public ScrollableCursorPolicy() { super(); setResultSetType(TYPE_SCROLL_INSENSITIVE); setResultSetConcurrency(CONCUR_UPDATABLE); } /** * INTERNAL: * Create a cursor policy with the pagesize. */ public ScrollableCursorPolicy(ReadQuery query, int pageSize) { super(query, pageSize); setResultSetType(TYPE_SCROLL_INSENSITIVE); setResultSetConcurrency(CONCUR_UPDATABLE); } /** * INTERNAL: * Execute the cursored select and build the stream. */ @Override public Object execute() { DatabaseCall call = getQuery().getQueryMechanism().cursorSelectAllRows(); // Create cursored stream ScrollableCursor cursor = new ScrollableCursor(call, this); return cursor; } /** * PUBLIC: * The ResultSetConcurrency specifies if the resultset is updatable. * It is one of, * CONCUR_READ_ONLY, * CONCUR_UPDATABLE */ public int getResultSetConcurrency() { return resultSetConcurrency; } /** * PUBLIC: * The ResultSetType specifies if the resultset is sensitive to changes made by others. * It is one of, * TYPE_SCROLL_INSENSITIVE, * TYPE_SCROLL_SENSITIVE */ public int getResultSetType() { return resultSetType; } @Override public boolean isScrollableCursorPolicy() { return true; } /** * INTERNAL: * Execute the cursored select and build the stream. */ @Override public Object remoteExecute() { return ((DistributedSession)getQuery().getSession()).cursorSelectObjects(this); } /** * PUBLIC: * The ResultSetConcurrency specifies if the resultset is updatable. * It is one of, * CONCUR_READ_ONLY, * CONCUR_UPDATABLE */ public void setResultSetConcurrency(int resultSetConcurrency) { this.resultSetConcurrency = resultSetConcurrency; } /** * PUBLIC: * The ResultSetType specifies if the resultset is sensitive to changes made by others. * It is one of, * TYPE_SCROLL_INSENSITIVE, * TYPE_SCROLL_SENSITIVE */ public void setResultSetType(int resultSetType) { this.resultSetType = resultSetType; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy