public abstract class PgxFrame
extends java.lang.Object
implements java.lang.AutoCloseable| Constructor and Description |
|---|
PgxFrame() |
| Modifier and Type | Method and Description |
|---|---|
void |
close()
Calls
destroyAsync() and wait for completion. |
long |
count()
Gives the numbers of rows in a frame.
|
abstract PgxFuture<java.lang.Long> |
countAsync()
Gives the numbers of rows in a frame
|
void |
destroy()
Blocking version of
destroyAsync(). |
abstract PgxFuture<java.lang.Void> |
destroyAsync()
Requests destruction of this object.
|
PgxFrame |
flatten(java.lang.String... columns)
Create a new PgxFrame with all the specified columns and vector columns flattened into multiple columns.
|
PgxFrame |
flattenAll()
Create a new PgxFrame with all nested columns and vector columns flattened into multiple columns.
|
PgxFuture<PgxFrame> |
flattenAllAsync()
Create a new PgxFrame with all nested columns and vector columns flattened into multiple columns.
|
PgxFrame |
flattenAllInPlace()
Modifies the PgxFrame by flattening all nested columns and vector columns into multiple columns.
|
PgxFuture<PgxFrame> |
flattenAllInPlaceAsync()
Modifies the PgxFrame by flattening all nested columns and vector columns into multiple columns.
|
PgxFuture<PgxFrame> |
flattenAsync(java.lang.String... columns)
Create a new PgxFrame with the specified nested columns and vector columns flattened into multiple columns.
|
PgxFrame |
flattenInPlace(java.lang.String... columns)
Modifies the PgxFrame by flattening all the specified columns and vector columns into multiple columns.
|
PgxFuture<PgxFrame> |
flattenInPlaceAsync(java.lang.String... columns)
Modifies the PgxFrame by flattening all the specified columns and vector columns into multiple columns.
|
abstract PgxFrameColumn |
getColumn(java.lang.String columnName)
Returns the column of the frame that has the given name
|
ColumnDescriptor[] |
getColumnDescriptors()
Returns a list containing the description of the different columns of the frames.
|
PgxFrame |
head()
Extracts the
headInPlace(long) first rows of the frame and put them in a new frame Blocking version of head(long). |
PgxFrame |
head(long numRows)
Extracts the numRows first rows of the frame and put them in a new frame Blocking version of
head(long). |
PgxFuture<PgxFrame> |
headAsync()
Extracts the
headInPlace(long) first rows of the frame and put them in a new frame |
PgxFuture<PgxFrame> |
headAsync(long numRows)
Extracts the numRows first rows of the frame and put them in a new frame
|
PgxFrame |
headInPlace()
Keeps only the first
DEFAULT_LIMIT rows in the frame Blocking version of headInPlace(). |
PgxFrame |
headInPlace(long numRows)
Keeps only the first numRows rows in the frame Blocking version of
headInPlace(long). |
PgxFuture<PgxFrame> |
headInPlaceAsync()
Modifies the frame to only keep the first
headInPlace(long) rows in the frame |
PgxFuture<PgxFrame> |
headInPlaceAsync(long numRows)
Modifies the frame to only keep the first numRows rows in the frame
|
PgxFrame |
join(PgxFrame right, java.lang.String joinKeyColumn)
Creates a new PgxFrame by adding the columns of the right frame to this frame aligned on equality of entries in column joinKeyColumn.
|
PgxFrame |
join(PgxFrame right, java.lang.String leftJoinKeyColumn, java.lang.String rightJoinKeyColumn)
Creates a new PgxFrame by adding the columns of the right frame to this frame aligned on equality of entries in column leftJoinKeyColumn for this frame and column rightJoinKeyColumn for the right frame.
|
PgxFrame |
join(PgxFrame right, java.lang.String joinKeyColumn, java.lang.String leftPrefix, java.lang.String rightPrefix)
Creates a new PgxFrame by adding the columns of the right frame to this frame, aligned on equality of entries in column leftJoinKeyColumn for this frame and column rightJoinKeyColumn for the right frame.
|
PgxFrame |
join(PgxFrame right, java.lang.String leftJoinKeyColumn, java.lang.String rightJoinKeyColumn, java.lang.String leftPrefix, java.lang.String rightPrefix)
Creates a new PgxFrame by adding the columns of the right frame to this frame, aligned on equality of entries in column leftJoinKeyColumn for this frame and column rightJoinKeyColumn for the right frame.
|
long |
length()
Gives the numbers of rows in a frame Blocking version of
lengthAsync(). |
PgxFuture<java.lang.Long> |
lengthAsync()
Gives the numbers of rows in a frame.
|
PgxFrame |
print()
Prints all results to
System.out. |
PgxFrame |
print(long numRows)
Prints
numRows results to System.out. |
PgxFrame |
print(long numResults, long from)
Prints
numResults results from the frame to System.out. |
PgxFrame |
print(java.io.PrintStream printStream, long numResults, long from)
Prints the content of the frame Blocking version of
printAsync(PrintStream, long, long). |
PgxFuture<PgxFrame> |
printAsync()
Prints all results to
System.out. |
PgxFuture<PgxFrame> |
printAsync(long numRows)
Prints
numRows results to System.out. |
PgxFuture<PgxFrame> |
printAsync(long numResults, long from)
Prints
numResults results from the frame to System.out. |
PgxFuture<PgxFrame> |
printAsync(java.io.PrintStream printStream, long numResults, long from)
Prints the content of the frame
|
PgxFrame |
renameColumn(java.lang.String oldColumnName, java.lang.String newColumnName)
Returns a new PgxFrame in which the specified column is renamed as specified Blocking version of
renameColumnAsync(String, String). |
PgxFuture<PgxFrame> |
renameColumnAsync(java.lang.String oldColumnName, java.lang.String newColumnName)
Returns a new PgxFrame in which the specified column is renamed as specified
|
PgxFrame |
renameColumnInPlace(java.lang.String oldColumnName, java.lang.String newColumnName)
Modifies the PgxFrame by renaming the specified column is renamed as specified Blocking version of
renameColumnInPlaceAsync(String, String). |
PgxFuture<PgxFrame> |
renameColumnInPlaceAsync(java.lang.String oldColumnName, java.lang.String newColumnName)
Modifies the PgxFrame by renaming the specified column is renamed as specified
|
PgxFrame |
renameColumns(ColumnRenaming... columnsWithRenamings)
Returns a new PgxFrame in which the specified columns are renamed as specified Blocking version of
renameColumnsAsync(ColumnRenaming...). |
PgxFuture<PgxFrame> |
renameColumnsAsync(ColumnRenaming... columnsWithRenamings)
Returns a new PgxFrame in which the specified columns are renamed as specified
|
PgxFrame |
renameColumnsInPlace(ColumnRenaming... columnsWithRenamings)
Modifies the PgxFrame to rename the specified columns as specified Blocking version of
renameColumnsInPlaceAsync(ColumnRenaming...). |
PgxFuture<PgxFrame> |
renameColumnsInPlaceAsync(ColumnRenaming... columnsWithRenamings)
Modifies the PgxFrame to rename the specified columns as specified
|
PgxFrame |
select(java.lang.String... columns)
Returns a new PgxFrame that contains only the specified columns Blocking version of
selectAsync(String...). |
PgxFuture<PgxFrame> |
selectAsync(java.lang.String... columns)
Returns a new PgxFrame that contains only the specified columns
|
PgxFrame |
selectInPlace(java.lang.String... columns)
Modifies the PgxFrame to contain only the specified columns Blocking version of
selectInPlaceAsync(String...). |
PgxFuture<PgxFrame> |
selectInPlaceAsync(java.lang.String... columns)
Modifies the PgxFrame to contain only the specified columns
|
PgxFrame |
tail()
Extracts the last
DEFAULT_LIMIT rows of the frame into a new frame. |
PgxFrame |
tail(long numRows)
Extracts the numRows last rows of the frame and put them in a new frame
|
PgxFuture<PgxFrame> |
tailAsync()
Extracts the last
DEFAULT_LIMIT rows of the frame and put them in a new frame |
PgxFuture<PgxFrame> |
tailAsync(long numRows)
Extracts the numRows last rows of the frame and put them in a new frame
|
PgxFrame |
tailInPlace()
Modifies the frame to keep the last
DEFAULT_LIMIT rows of the frame. |
PgxFrame |
tailInPlace(long numRows)
Modifies the frame to keep the last
DEFAULT_LIMIT rows of the frame. |
PgxFuture<PgxFrame> |
tailInPlaceAsync()
Modifies the frame to keep the last
DEFAULT_LIMIT rows of the frame |
PgxFuture<PgxFrame> |
tailInPlaceAsync(long numRows)
Modifies the frame to keep the last numRows rows of the frame
|
PgqlResultSet |
toPgqlResultSet()
Creates a new PgqlResultSet having the same content as this frame.
|
abstract PgxFuture<PgqlResultSet> |
toPgqlResultSetAsync()
Creates a new PgqlResultSet having the same content as this frame.
|
PgxFrame |
union(PgxFrame b, PgxFrame... others)
Creates a new PgxFrame by concatenating the rows of this frame with the rows of b and others.
|
abstract PgxGenericFrameStorer |
write()
Returns a
PgxGenericFrameStorer to configure the storing operation and then trigger it. |
public void close()
destroyAsync() and wait for completion.close in interface java.lang.AutoCloseablepublic long count()
throws java.lang.InterruptedException,
java.util.concurrent.ExecutionException
countAsync(). Calls countAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic abstract PgxFuture<java.lang.Long> countAsync()
public void destroy()
throws java.lang.InterruptedException,
java.util.concurrent.ExecutionException
destroyAsync(). Calls destroyAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedException - if the caller thread gets interrupted while waiting for completion.java.util.concurrent.ExecutionException - if any exception occurred during asynchronous execution. The actual exception will be nested.public abstract PgxFuture<java.lang.Void> destroyAsync()
public PgxFrame flatten(java.lang.String... columns) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
flattenAllAsync(). Calls flattenAllAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame flattenAll() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
flattenAllAsync(). Calls flattenAllAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> flattenAllAsync()
public PgxFrame flattenAllInPlace() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
flattenAllInPlaceAsync(). Calls flattenAllInPlaceAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> flattenAllInPlaceAsync()
public PgxFuture<PgxFrame> flattenAsync(java.lang.String... columns)
public PgxFrame flattenInPlace(java.lang.String... columns) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
flattenAllInPlaceAsync(). Calls flattenAllInPlaceAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> flattenInPlaceAsync(java.lang.String... columns)
public abstract PgxFrameColumn getColumn(java.lang.String columnName)
columnName - the name of the column to get backpublic ColumnDescriptor[] getColumnDescriptors()
public PgxFrame head() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
headInPlace(long) first rows of the frame and put them in a new frame Blocking version of head(long). Calls head(long) and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame head(long numRows) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
head(long). Calls head(long) and waits for the returned PgxFuture to complete.numRows - the number of rows to extract from the topjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> headAsync()
headInPlace(long) first rows of the frame and put them in a new framepublic PgxFuture<PgxFrame> headAsync(long numRows)
numRows - the number of rows to extract from the toppublic PgxFrame headInPlace() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
DEFAULT_LIMIT rows in the frame Blocking version of headInPlace(). Calls headInPlace() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame headInPlace(long numRows) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
headInPlace(long). Calls headInPlace(long) and waits for the returned PgxFuture to complete.numRows - the number of rows to keep from the topjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> headInPlaceAsync()
headInPlace(long) rows in the framepublic PgxFuture<PgxFrame> headInPlaceAsync(long numRows)
numRows - the number of rows to keep from the toppublic PgxFrame join(PgxFrame right, java.lang.String joinKeyColumn) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
join(PgxFrame, String, String, String, String) Blocking version of joinAsync(PgxFrame, String). Calls joinAsync(PgxFrame, String) and waits for the returned PgxFuture to completeright - PgxFrame whose columns will be added to the columns of this PgxFramejoinKeyColumn - Column on which the equality test will be performed in order to align the rows between the two framesjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame join(PgxFrame right, java.lang.String leftJoinKeyColumn, java.lang.String rightJoinKeyColumn) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
join(PgxFrame, String, String, String, String) Blocking version of joinAsync(PgxFrame, String, String). Calls join(PgxFrame, String, String) and waits for the returned PgxFuture to completeright - PgxFrame whose columns will be added to the columns of this PgxFrameleftJoinKeyColumn - Column of this frame on which the equality test will be performed with rightJoinKeyColumnrightJoinKeyColumn - Column of right frame on which the equality test will be performed with leftJoinKeyColumnjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame join(PgxFrame right, java.lang.String joinKeyColumn, java.lang.String leftPrefix, java.lang.String rightPrefix) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
joinAsync(PgxFrame, String, String, String). Calls join(PgxFrame, String, String, String) and waits for the returned PgxFuture to completeright - PgxFrame whose columns will be added to the columns of this PgxFramejoinKeyColumn - Column of this and right on which the equality test will be performedleftPrefix - Prefix of the columns name of this frame in the resulting framerightPrefix - Prefix of the columns name of right frame in the resulting framejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame join(PgxFrame right, java.lang.String leftJoinKeyColumn, java.lang.String rightJoinKeyColumn, java.lang.String leftPrefix, java.lang.String rightPrefix) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
joinAsync(PgxFrame, String, String, String, String). Calls join(PgxFrame, String, String, String, String) and waits for the returned PgxFuture to completeright - PgxFrame whose columns will be added to the columns of this PgxFrameleftJoinKeyColumn - Column of this frame on which the equality test will be performed with rightJoinKeyColumnrightJoinKeyColumn - Column of right frame on which the equality test will be performed with leftJoinKeyColumnleftPrefix - Prefix of the columns name of this frame in the resulting framerightPrefix - Prefix of the columns name of right frame in the resulting framejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic long length()
throws java.lang.InterruptedException,
java.util.concurrent.ExecutionException
lengthAsync(). Calls lengthAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<java.lang.Long> lengthAsync()
public PgxFrame print() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
System.out. Blocking version of printAsync(). Calls printAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame print(long numRows) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
numRows results to System.out. If numRows is larger than the number of rows in the frame, only as many rows as in the frame are printed. Blocking version of printAsync(long). Calls printAsync(long) and waits for the returned PgxFuture to complete.numRows - number of resultjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame print(long numResults, long from) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
numResults results from the frame to System.out. Blocking version of printAsync(long, long). Calls printAsync(long, long) and waits for the returned PgxFuture to complete.numResults - number of resultfrom - first result to be printed (start counting from 0)java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame print(java.io.PrintStream printStream, long numResults, long from) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
printAsync(PrintStream, long, long). Calls printAsync(PrintStream, long, long) and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> printAsync()
System.out.public PgxFuture<PgxFrame> printAsync(long numRows)
numRows results to System.out. If numRows is larger than the number of rows in the frame, only as many rows as in the frame are printed.numRows - number of resultpublic PgxFuture<PgxFrame> printAsync(long numResults, long from)
numResults results from the frame to System.out.numResults - number of resultfrom - first result to be printed (start counting from 0)public PgxFuture<PgxFrame> printAsync(java.io.PrintStream printStream, long numResults, long from)
public PgxFrame renameColumn(java.lang.String oldColumnName, java.lang.String newColumnName) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
renameColumnAsync(String, String). Calls renameColumnAsync(String, String) and waits for the returned PgxFuture to complete.oldColumnName - the name of the column to renamenewColumnName - the name of the column in the new framejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> renameColumnAsync(java.lang.String oldColumnName, java.lang.String newColumnName)
oldColumnName - the name of the column to renamenewColumnName - the name of the column in the new framepublic PgxFrame renameColumnInPlace(java.lang.String oldColumnName, java.lang.String newColumnName) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
renameColumnInPlaceAsync(String, String). Calls renameColumnInPlaceAsync(String, String) and waits for the returned PgxFuture to complete.oldColumnName - the name of the column to renamenewColumnName - the name of the column in the new framejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> renameColumnInPlaceAsync(java.lang.String oldColumnName, java.lang.String newColumnName)
oldColumnName - the name of the column to renamenewColumnName - the name of the column in the new framepublic PgxFrame renameColumns(ColumnRenaming... columnsWithRenamings) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
renameColumnsAsync(ColumnRenaming...). Calls renameColumnsAsync(ColumnRenaming...) and waits for the returned PgxFuture to complete.columnsWithRenamings - the list of columns to rename and their new namesjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> renameColumnsAsync(ColumnRenaming... columnsWithRenamings)
columnsWithRenamings - the list of columns to rename and their new namespublic PgxFrame renameColumnsInPlace(ColumnRenaming... columnsWithRenamings) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
renameColumnsInPlaceAsync(ColumnRenaming...). Calls renameColumnsInPlaceAsync(ColumnRenaming...) and waits for the returned PgxFuture to complete.columnsWithRenamings - the list of columns to rename and their new namesjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> renameColumnsInPlaceAsync(ColumnRenaming... columnsWithRenamings)
columnsWithRenamings - the list of columns to rename and their new namespublic PgxFrame select(java.lang.String... columns) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
selectAsync(String...). Calls selectAsync(String...) and waits for the returned PgxFuture to complete.columns - the list of columns to keep in the new PgxFramejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> selectAsync(java.lang.String... columns)
columns - the list of columns to keep in the new PgxFramepublic PgxFrame selectInPlace(java.lang.String... columns) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
selectInPlaceAsync(String...). Calls selectInPlaceAsync(String...) and waits for the returned PgxFuture to complete.columns - the list of columns to keep in the new PgxFramejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> selectInPlaceAsync(java.lang.String... columns)
columns - the list of columns to keep in the new PgxFramepublic PgxFrame tail() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
DEFAULT_LIMIT rows of the frame into a new frame. Blocking version of tail(). Calls tailAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame tail(long numRows) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
numRows - the number of rows to extract from the bottomjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> tailAsync()
DEFAULT_LIMIT rows of the frame and put them in a new framepublic PgxFuture<PgxFrame> tailAsync(long numRows)
numRows - the number of rows to extract from the bottompublic PgxFrame tailInPlace() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
DEFAULT_LIMIT rows of the frame. Blocking version of tailInPlace(). Calls tailInPlaceAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFrame tailInPlace(long numRows) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
DEFAULT_LIMIT rows of the frame. Blocking version of tailInPlace(long). Calls tailInPlaceAsync(long) and waits for the returned PgxFuture to complete.numRows - the number of rows to extract from the bottomjava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic PgxFuture<PgxFrame> tailInPlaceAsync()
DEFAULT_LIMIT rows of the framepublic PgxFuture<PgxFrame> tailInPlaceAsync(long numRows)
numRows - the number of rows to extract from the bottompublic PgqlResultSet toPgqlResultSet() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
toPgqlResultSetAsync(). Calls toPgqlResultSetAsync() and waits for the returned PgxFuture to complete.java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic abstract PgxFuture<PgqlResultSet> toPgqlResultSetAsync()
public PgxFrame union(PgxFrame b, PgxFrame... others) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
unionAsync(PgxFrame, PgxFrame...). Calls unionAsync(PgxFrame, PgxFrame...) and waits for the return PgxFuture to completeb - PgxFrame whose rows to append the the rows of this PgxFrameothers - additional PgxFrames whose rows to append to the result framejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic abstract PgxGenericFrameStorer write()
PgxGenericFrameStorer to configure the storing operation and then trigger it.PgxGenericFrameStorer to configure the storing