/
RowProcessingStateStandardImpl.java
139 lines (113 loc) · 3.69 KB
/
RowProcessingStateStandardImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.sql.results.internal;
import java.util.List;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.query.NavigablePath;
import org.hibernate.query.spi.QueryOptions;
import org.hibernate.query.spi.QueryParameterBindings;
import org.hibernate.sql.exec.spi.Callback;
import org.hibernate.sql.results.graph.Initializer;
import org.hibernate.sql.results.graph.entity.EntityFetch;
import org.hibernate.sql.results.jdbc.internal.JdbcValuesSourceProcessingStateStandardImpl;
import org.hibernate.sql.results.jdbc.spi.JdbcValues;
import org.hibernate.sql.results.jdbc.spi.JdbcValuesSourceProcessingState;
import org.hibernate.sql.results.jdbc.spi.RowProcessingState;
import org.hibernate.sql.results.spi.RowReader;
/**
* Standard RowProcessingState implementation
*/
public class RowProcessingStateStandardImpl implements RowProcessingState {
private static final Initializer[] NO_INITIALIZERS = new Initializer[0];
private final JdbcValuesSourceProcessingStateStandardImpl resultSetProcessingState;
private final QueryOptions queryOptions;
private final Initializer[] initializers;
private final RowReader<?> rowReader;
private final JdbcValues jdbcValues;
public RowProcessingStateStandardImpl(
JdbcValuesSourceProcessingStateStandardImpl resultSetProcessingState,
QueryOptions queryOptions,
RowReader<?> rowReader,
JdbcValues jdbcValues) {
this.resultSetProcessingState = resultSetProcessingState;
this.queryOptions = queryOptions;
this.rowReader = rowReader;
this.jdbcValues = jdbcValues;
final List<Initializer> initializers = rowReader.getInitializers();
if ( initializers == null || initializers.isEmpty() ) {
this.initializers = NO_INITIALIZERS;
}
else {
//noinspection ToArrayCallWithZeroLengthArrayArgument
this.initializers = initializers.toArray( new Initializer[initializers.size()] );
}
}
@Override
public JdbcValuesSourceProcessingState getJdbcValuesSourceProcessingState() {
return resultSetProcessingState;
}
@Override
public RowReader<?> getRowReader() {
return rowReader;
}
public boolean next() {
return jdbcValues.next( this );
}
public boolean previous() {
return jdbcValues.previous( this );
}
public boolean scroll(int i) {
return jdbcValues.scroll( i, this );
}
public boolean position(int i) {
return jdbcValues.position( i, this );
}
public int getPosition() {
return jdbcValues.getPosition();
}
public boolean first() {
return jdbcValues.first( this );
}
public boolean last() {
return jdbcValues.last( this );
}
@Override
public Object getJdbcValue(int position) {
return jdbcValues.getCurrentRowValuesArray()[ position ];
}
@Override
public void registerNonExists(EntityFetch fetch) {
}
@Override
public void finishRowProcessing() {
}
@Override
public SharedSessionContractImplementor getSession() {
return getJdbcValuesSourceProcessingState().getExecutionContext().getSession();
}
@Override
public QueryOptions getQueryOptions() {
return queryOptions;
}
@Override
public QueryParameterBindings getQueryParameterBindings() {
return getJdbcValuesSourceProcessingState().getExecutionContext().getQueryParameterBindings();
}
@Override
public Callback getCallback() {
return afterLoadAction -> {};
}
@Override
public Initializer resolveInitializer(NavigablePath path) {
for ( Initializer initializer : initializers ) {
if ( initializer.getNavigablePath().equals( path ) ) {
return initializer;
}
}
return null;
}
}