public class MockFileDatabase extends java.lang.Object implements MockDataProvider
MockDataProvider
.
This data provider reads a database model from a text file, as documented in
the below sample file:
# Comments start off with a hash
# Statement strings have no prefix and should be ended with a semi-colon
select 'A' from dual;
# Statements may be followed by results, using >
> A
> -
> A
# Statements should be followed by "@ rows: [N]" indicating the update count
@ rows: 1
# New statements can be listed int his file
select 'A', 'B' from dual;
> A B
> - -
> A B
@ rows: 1
# Beware of the exact syntax (e.g. using quotes)
select "TABLE1"."ID1", "TABLE1"."NAME1" from "TABLE1";
> ID1 NAME1
> --- -----
> 1 X
> 2 Y
@ rows: 2
# Statements can return several results
> F1 F2 F3 is a bit more complex
> --- -- ----------------------------
> 1 2 and a string containing data
> 1.1 x another string
@ rows: 2
> A B "C D"
> - - -----
> x y z
@ rows: 1
Results can be loaded using several techniques:
>
, then
DSLContext.fetchFromTXT(String)
is usedThis implementation is still very experimental and not officially supported!
Constructor and Description |
---|
MockFileDatabase(java.io.File file) |
MockFileDatabase(java.io.File file,
java.lang.String encoding) |
MockFileDatabase(java.io.InputStream stream) |
MockFileDatabase(java.io.InputStream stream,
java.lang.String encoding) |
MockFileDatabase(java.io.Reader reader) |
MockFileDatabase(java.lang.String string) |
Modifier and Type | Method and Description |
---|---|
MockResult[] |
execute(MockExecuteContext ctx)
Execution callback for a JDBC query execution.
|
MockFileDatabase |
nullLiteral(java.lang.String literal)
Specify the
null literal, i.e. the string that should be
parsed as a null reference, rather than as the string
itself. |
java.util.Map<java.lang.String,java.util.List<MockResult>> |
queries()
Deprecated.
- Experimental: Do not use. Subject to change.
|
public MockFileDatabase(java.io.File file) throws java.io.IOException
java.io.IOException
public MockFileDatabase(java.io.File file, java.lang.String encoding) throws java.io.IOException
java.io.IOException
public MockFileDatabase(java.io.InputStream stream) throws java.io.IOException
java.io.IOException
public MockFileDatabase(java.io.InputStream stream, java.lang.String encoding) throws java.io.IOException
java.io.IOException
public MockFileDatabase(java.io.Reader reader) throws java.io.IOException
java.io.IOException
public MockFileDatabase(java.lang.String string) throws java.io.IOException
java.io.IOException
public MockFileDatabase nullLiteral(java.lang.String literal)
null
literal, i.e. the string that should be
parsed as a null
reference, rather than as the string
itself.DSLContext.fetchFromTXT(String, String)
@Deprecated public java.util.Map<java.lang.String,java.util.List<MockResult>> queries()
public MockResult[] execute(MockExecuteContext ctx) throws java.sql.SQLException
MockDataProvider
This callback will be called by MockStatement
upon the various
statement execution methods. These include:
Statement.execute(String)
Statement.execute(String, int)
Statement.execute(String, int[])
Statement.execute(String, String[])
Statement.executeBatch()
Statement.executeQuery(String)
Statement.executeUpdate(String)
Statement.executeUpdate(String, int)
Statement.executeUpdate(String, int[])
Statement.executeUpdate(String, String[])
PreparedStatement.execute()
PreparedStatement.executeQuery()
PreparedStatement.executeUpdate()
The various execution modes are unified into this simple method. Implementations should adhere to this contract:
MockStatement
does not distinguish between "static" and
"prepared" statements. However, a non-empty
MockExecuteContext.bindings()
is a strong indicator for a
PreparedStatement
.MockStatement
does not distinguish between "batch" and
"single" statements. However...
MockExecuteContext.batchSQL()
with more than one SQL string
is a strong indicator for a "multi-batch statement", as understood by
jOOQ's DSLContext.batch(Query...)
.MockExecuteContext.batchBindings()
with more than one bind
variable array is a strong indicator for a "single-batch statement", as
understood by jOOQ's DSLContext.batch(Query)
.MockResult
objects
as batch executions. In other words, you should guarantee that:
int multiSize = context.getBatchSQL().length;
int singleSize = context.getBatchBindings().length;
assertEquals(result.length, Math.max(multiSize, singleSize))
This holds true also for non-batch executions (where both sizes are equal
to 1
)
Statement.getMoreResults()
.ResultQuery.fetchMany()
Statement.RETURN_GENERATED_KEYS
) are
requested from this execution, you can also add MockResult.data
to your result, in addition to the affected MockResult.rows
. The
relevant flag is passed from MockStatement
to any of these
properties:
MockResult
's first Record
. If OUT parameters are
requested, implementors must ensure the presence of such a
Record
.execute
in interface MockDataProvider
ctx
- The execution context.null
or an empty
MockResult[]
is returned, this has the same effect
as returning
new MockResult[] { new MockResult(-1, null) }
java.sql.SQLException
- A SQLException
that is passed through
to jOOQ.Copyright © 2018. All Rights Reserved.