Package org.h2.expression.analysis
Class WindowFrame
java.lang.Object
org.h2.expression.analysis.WindowFrame
Window frame clause.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
private static class
private static class
private static class
private static class
private static final class
private static final class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final WindowFrameExclusion
private final WindowFrameBound
private final WindowFrameBound
private final WindowFrameUnits
-
Constructor Summary
ConstructorsConstructorDescriptionWindowFrame
(WindowFrameUnits units, WindowFrameBound starting, WindowFrameBound following, WindowFrameExclusion exclusion) Creates new instance of window frame clause. -
Method Summary
Modifier and TypeMethodDescriptionbiIterator
(ArrayList<Value[]> orderedRows, int startIndex1, int endIndex1, int startIndex2, int endIndex2, boolean reverse) complexIterator
(ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, int startIndex, int endIndex, boolean reverse) private static Value[]
getCompareRow
(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, WindowFrameBound bound, boolean add) Appends bound value to the current row and produces row for comparison operations.private int
getEndIndex
(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow) Returns end index of this frame,static int
getEndIndex
(Window over, SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow) Returns end index for the specified frame, or default end index if frame is null.Returns the exclusion clause.Returns the following clause.private int
getIndex
(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, WindowFrameBound bound, boolean forFollowing) Returns starting or ending index of a window frame.private static int
getIntOffset
(WindowFrameBound bound, Value[] values, SessionLocal session) getSQL
(StringBuilder builder, int formattingFlags) Append SQL representation to the specified builder.int
getStartIndex
(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow) Returns start index of this frame,Returns the starting clause.getUnits()
Returns the units.private static Value
getValueOffset
(WindowFrameBound bound, Value[] values, SessionLocal session) boolean
isValid()
Checks validity of this frame.boolean
Check if bounds of this frame has variable expressions.iterator
(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, boolean reverse) Returns iterator.iterator
(Window over, SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, boolean reverse) Returns iterator for the specified frame, or default iterator if frame is null.(package private) void
mapColumns
(ColumnResolver resolver, int level, int state) Map the columns of the resolver to expression columns.(package private) void
optimize
(SessionLocal session) Try to optimize bound expressions.plainIterator
(ArrayList<Value[]> orderedRows, int startIndex, int endIndex, boolean reverse) private static int
toGroupEnd
(ArrayList<Value[]> orderedRows, SortOrder sortOrder, int offset, int maxOffset) private static int
toGroupStart
(ArrayList<Value[]> orderedRows, SortOrder sortOrder, int offset, int minOffset) triIterator
(ArrayList<Value[]> orderedRows, int startIndex1, int endIndex1, int startIndex2, int endIndex2, int startIndex3, int endIndex3, boolean reverse) (package private) void
updateAggregate
(SessionLocal session, int stage) Update an aggregate value.
-
Field Details
-
units
-
starting
-
following
-
exclusion
-
-
Constructor Details
-
WindowFrame
public WindowFrame(WindowFrameUnits units, WindowFrameBound starting, WindowFrameBound following, WindowFrameExclusion exclusion) Creates new instance of window frame clause.- Parameters:
units
- unitsstarting
- starting clausefollowing
- following clauseexclusion
- exclusion clause
-
-
Method Details
-
iterator
public static Iterator<Value[]> iterator(Window over, SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, boolean reverse) Returns iterator for the specified frame, or default iterator if frame is null.- Parameters:
over
- windowsession
- the sessionorderedRows
- ordered rowssortOrder
- sort ordercurrentRow
- index of the current rowreverse
- whether iterator should iterate in reverse order- Returns:
- iterator
-
getEndIndex
public static int getEndIndex(Window over, SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow) Returns end index for the specified frame, or default end index if frame is null.- Parameters:
over
- windowsession
- the sessionorderedRows
- ordered rowssortOrder
- sort ordercurrentRow
- index of the current row- Returns:
- end index
- Throws:
UnsupportedOperationException
- if over is not null and its exclusion clause is not EXCLUDE NO OTHERS
-
plainIterator
-
biIterator
-
triIterator
-
toGroupStart
-
toGroupEnd
-
getIntOffset
-
getCompareRow
private static Value[] getCompareRow(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, WindowFrameBound bound, boolean add) Appends bound value to the current row and produces row for comparison operations.- Parameters:
session
- the sessionorderedRows
- rows in partitionsortOrder
- the sort ordercurrentRow
- index of the current rowbound
- window frame boundadd
- false for PRECEDING, true for FOLLOWING- Returns:
- row for comparison operations, or null if result is out of range and should be treated as UNLIMITED
-
getValueOffset
-
getUnits
Returns the units.- Returns:
- the units
-
getStarting
Returns the starting clause.- Returns:
- the starting clause
-
getFollowing
Returns the following clause.- Returns:
- the following clause, or null
-
getExclusion
Returns the exclusion clause.- Returns:
- the exclusion clause
-
isValid
public boolean isValid()Checks validity of this frame.- Returns:
- whether bounds of this frame valid
-
isVariableBounds
public boolean isVariableBounds()Check if bounds of this frame has variable expressions. This method may be used only afteroptimize(SessionLocal)
invocation.- Returns:
- if bounds of this frame has variable expressions
-
mapColumns
Map the columns of the resolver to expression columns.- Parameters:
resolver
- the column resolverlevel
- the subquery nesting levelstate
- current state for nesting checks
-
optimize
Try to optimize bound expressions.- Parameters:
session
- the session
-
updateAggregate
Update an aggregate value.- Parameters:
session
- the sessionstage
- select stage- See Also:
-
iterator
public Iterator<Value[]> iterator(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, boolean reverse) Returns iterator.- Parameters:
session
- the sessionorderedRows
- ordered rowssortOrder
- sort ordercurrentRow
- index of the current rowreverse
- whether iterator should iterate in reverse order- Returns:
- iterator
-
getStartIndex
public int getStartIndex(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow) Returns start index of this frame,- Parameters:
session
- the sessionorderedRows
- ordered rowssortOrder
- sort ordercurrentRow
- index of the current row- Returns:
- start index
- Throws:
UnsupportedOperationException
- if exclusion clause is not EXCLUDE NO OTHERS
-
getEndIndex
private int getEndIndex(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow) Returns end index of this frame,- Parameters:
session
- the sessionorderedRows
- ordered rowssortOrder
- sort ordercurrentRow
- index of the current row- Returns:
- end index
- Throws:
UnsupportedOperationException
- if exclusion clause is not EXCLUDE NO OTHERS
-
getIndex
private int getIndex(SessionLocal session, ArrayList<Value[]> orderedRows, SortOrder sortOrder, int currentRow, WindowFrameBound bound, boolean forFollowing) Returns starting or ending index of a window frame.- Parameters:
session
- the sessionorderedRows
- rows in partitionsortOrder
- the sort ordercurrentRow
- index of the current rowbound
- window frame boundforFollowing
- false for start index, true for end index- Returns:
- starting or ending index of a window frame (inclusive), can be 0 or be equal to the number of rows if frame is not limited from that side
-
complexIterator
-
getSQL
Append SQL representation to the specified builder.- Parameters:
builder
- string builderformattingFlags
- quote all identifiers- Returns:
- the specified string builder
- See Also:
-