tableName
This commit is contained in:
parent
3fb360147d
commit
d2d3e7b93d
13 changed files with 52 additions and 20 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
# 2.0.0-dev.21
|
||||||
|
* Add tableName to query
|
||||||
|
|
||||||
# 2.0.0-dev.20
|
# 2.0.0-dev.20
|
||||||
* Join updates.
|
* Join updates.
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ class _FakeExecutor extends QueryExecutor {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<List>> query(
|
Future<List<List>> query(
|
||||||
String query, Map<String, dynamic> substitutionValues,
|
String tableName, String query, Map<String, dynamic> substitutionValues,
|
||||||
[returningFields]) async {
|
[returningFields]) async {
|
||||||
var now = new DateTime.now();
|
var now = new DateTime.now();
|
||||||
print(
|
print(
|
||||||
|
|
|
@ -13,6 +13,9 @@ abstract class QueryBase<T> {
|
||||||
/// Values to insert into a prepared statement.
|
/// Values to insert into a prepared statement.
|
||||||
final Map<String, dynamic> substitutionValues = {};
|
final Map<String, dynamic> substitutionValues = {};
|
||||||
|
|
||||||
|
/// The table against which to execute this query.
|
||||||
|
String get tableName;
|
||||||
|
|
||||||
/// The list of fields returned by this query.
|
/// The list of fields returned by this query.
|
||||||
///
|
///
|
||||||
/// If it's `null`, then this query will perform a `SELECT *`.
|
/// If it's `null`, then this query will perform a `SELECT *`.
|
||||||
|
@ -32,7 +35,7 @@ abstract class QueryBase<T> {
|
||||||
Future<List<T>> get(QueryExecutor executor) async {
|
Future<List<T>> get(QueryExecutor executor) async {
|
||||||
var sql = compile(Set());
|
var sql = compile(Set());
|
||||||
return executor
|
return executor
|
||||||
.query(sql, substitutionValues)
|
.query(tableName, sql, substitutionValues)
|
||||||
.then((it) => it.map(deserialize).toList());
|
.then((it) => it.map(deserialize).toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,9 +119,6 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
||||||
String _crossJoin, _groupBy;
|
String _crossJoin, _groupBy;
|
||||||
int _limit, _offset;
|
int _limit, _offset;
|
||||||
|
|
||||||
/// The table against which to execute this query.
|
|
||||||
String get tableName;
|
|
||||||
|
|
||||||
/// A reference to an abstract query builder.
|
/// A reference to an abstract query builder.
|
||||||
///
|
///
|
||||||
/// This is usually a generated class.
|
/// This is usually a generated class.
|
||||||
|
@ -320,15 +320,17 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
||||||
|
|
||||||
if (_joins.isEmpty) {
|
if (_joins.isEmpty) {
|
||||||
return executor
|
return executor
|
||||||
.query(
|
.query(tableName, sql, substitutionValues,
|
||||||
sql, substitutionValues, fields.map(adornWithTableName).toList())
|
fields.map(adornWithTableName).toList())
|
||||||
.then((it) => it.map(deserialize).toList());
|
.then((it) => it.map(deserialize).toList());
|
||||||
} else {
|
} else {
|
||||||
return executor.transaction(() async {
|
return executor.transaction(() async {
|
||||||
// TODO: Can this be done with just *one* query?
|
// TODO: Can this be done with just *one* query?
|
||||||
var existing = await get(executor);
|
var existing = await get(executor);
|
||||||
//var sql = compile(preamble: 'SELECT $tableName.id', withFields: false);
|
//var sql = compile(preamble: 'SELECT $tableName.id', withFields: false);
|
||||||
return executor.query(sql, substitutionValues).then((_) => existing);
|
return executor
|
||||||
|
.query(tableName, sql, substitutionValues)
|
||||||
|
.then((_) => existing);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -348,7 +350,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
||||||
var sql = compile(Set());
|
var sql = compile(Set());
|
||||||
sql = 'WITH $tableName as ($insertion RETURNING $returning) ' + sql;
|
sql = 'WITH $tableName as ($insertion RETURNING $returning) ' + sql;
|
||||||
return executor
|
return executor
|
||||||
.query(sql, substitutionValues)
|
.query(tableName, sql, substitutionValues)
|
||||||
.then((it) => it.isEmpty ? null : deserialize(it.first));
|
.then((it) => it.isEmpty ? null : deserialize(it.first));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -370,7 +372,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
||||||
sql = 'WITH $tableName as ($updateSql RETURNING $returning) ' + sql;
|
sql = 'WITH $tableName as ($updateSql RETURNING $returning) ' + sql;
|
||||||
|
|
||||||
return executor
|
return executor
|
||||||
.query(sql, substitutionValues)
|
.query(tableName, sql, substitutionValues)
|
||||||
.then((it) => it.map(deserialize).toList());
|
.then((it) => it.map(deserialize).toList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -504,10 +506,17 @@ abstract class QueryWhere {
|
||||||
|
|
||||||
/// Represents the `UNION` of two subqueries.
|
/// Represents the `UNION` of two subqueries.
|
||||||
class Union<T> extends QueryBase<T> {
|
class Union<T> extends QueryBase<T> {
|
||||||
|
/// The subject(s) of this binary operation.
|
||||||
final QueryBase<T> left, right;
|
final QueryBase<T> left, right;
|
||||||
|
|
||||||
|
/// Whether this is a `UNION ALL` operation.
|
||||||
final bool all;
|
final bool all;
|
||||||
|
|
||||||
Union(this.left, this.right, {this.all: false}) {
|
@override
|
||||||
|
final String tableName;
|
||||||
|
|
||||||
|
Union(this.left, this.right, {this.all: false, String tableName})
|
||||||
|
: this.tableName = tableName ?? left.tableName {
|
||||||
substitutionValues
|
substitutionValues
|
||||||
..addAll(left.substitutionValues)
|
..addAll(left.substitutionValues)
|
||||||
..addAll(right.substitutionValues);
|
..addAll(right.substitutionValues);
|
||||||
|
@ -598,9 +607,11 @@ class JoinOn {
|
||||||
abstract class QueryExecutor {
|
abstract class QueryExecutor {
|
||||||
const QueryExecutor();
|
const QueryExecutor();
|
||||||
|
|
||||||
|
/// Executes a single query.
|
||||||
Future<List<List>> query(
|
Future<List<List>> query(
|
||||||
String query, Map<String, dynamic> substitutionValues,
|
String tableName, String query, Map<String, dynamic> substitutionValues,
|
||||||
[List<String> returningFields]);
|
[List<String> returningFields]);
|
||||||
|
|
||||||
|
/// Begins a database transaction.
|
||||||
Future<T> transaction<T>(FutureOr<T> f());
|
Future<T> transaction<T>(FutureOr<T> f());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name: angel_orm
|
name: angel_orm
|
||||||
version: 2.0.0-dev.20
|
version: 2.0.0-dev.21
|
||||||
description: Runtime support for Angel's ORM. Includes base classes for queries.
|
description: Runtime support for Angel's ORM. Includes base classes for queries.
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
homepage: https://github.com/angel-dart/orm
|
homepage: https://github.com/angel-dart/orm
|
||||||
|
|
|
@ -23,7 +23,7 @@ class _FakeExecutor extends QueryExecutor {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<List>> query(
|
Future<List<List>> query(
|
||||||
String query, Map<String, dynamic> substitutionValues,
|
String tableName, String query, Map<String, dynamic> substitutionValues,
|
||||||
[returningFields]) async {
|
[returningFields]) async {
|
||||||
var now = new DateTime.now();
|
var now = new DateTime.now();
|
||||||
print(
|
print(
|
||||||
|
|
|
@ -24,7 +24,7 @@ class PostgresExecutor extends QueryExecutor {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<List>> query(
|
Future<List<List>> query(
|
||||||
String query, Map<String, dynamic> substitutionValues,
|
String tableName, String query, Map<String, dynamic> substitutionValues,
|
||||||
[List<String> returningFields]) {
|
[List<String> returningFields]) {
|
||||||
if (returningFields != null) {
|
if (returningFields != null) {
|
||||||
var fields = returningFields.join(', ');
|
var fields = returningFields.join(', ');
|
||||||
|
|
0
angel_orm_mysql/lib/angel_orm_mysql.dart
Normal file
0
angel_orm_mysql/lib/angel_orm_mysql.dart
Normal file
0
angel_orm_mysql/mono_pkg.yaml
Normal file
0
angel_orm_mysql/mono_pkg.yaml
Normal file
14
angel_orm_mysql/pubspec.yaml
Normal file
14
angel_orm_mysql/pubspec.yaml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
name: angel_orm_mysql
|
||||||
|
version: 1.0.0-dev
|
||||||
|
description: MySQL support for Angel's ORM. Includes functionality for querying and transactions.
|
||||||
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
|
homepage: https://github.com/angel-dart/orm
|
||||||
|
environment:
|
||||||
|
sdk: '>=2.0.0-dev.1.2 <3.0.0'
|
||||||
|
dependencies:
|
||||||
|
angel_orm: ^2.0.0-dev
|
||||||
|
logging: ^0.11.0
|
||||||
|
pool: ^1.0.0
|
||||||
|
sqljocky5: ^2.0.0
|
||||||
|
dev_dependencies:
|
||||||
|
test: ^1.0.0
|
|
@ -1,3 +1,6 @@
|
||||||
|
# 1.0.0-dev.3
|
||||||
|
* Support for `tableName`.
|
||||||
|
|
||||||
# 1.0.0-dev.2
|
# 1.0.0-dev.2
|
||||||
* Add optional logging.
|
* Add optional logging.
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,6 @@ main() async {
|
||||||
return new PostgreSQLConnection('localhost', 5432, 'angel_orm_test');
|
return new PostgreSQLConnection('localhost', 5432, 'angel_orm_test');
|
||||||
});
|
});
|
||||||
|
|
||||||
var rows = await executor.query('SELECT * FROM users', {});
|
var rows = await executor.query('users', 'SELECT * FROM users', {});
|
||||||
print(rows);
|
print(rows);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ class PostgreSQLExecutor extends QueryExecutor {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<List>> query(
|
Future<List<List>> query(
|
||||||
String query, Map<String, dynamic> substitutionValues,
|
String tableName, String query, Map<String, dynamic> substitutionValues,
|
||||||
[List<String> returningFields]) {
|
[List<String> returningFields]) {
|
||||||
if (returningFields != null) {
|
if (returningFields != null) {
|
||||||
var fields = returningFields.join(', ');
|
var fields = returningFields.join(', ');
|
||||||
|
@ -104,11 +104,12 @@ class PostgreSQLExecutorPool extends QueryExecutor {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<List>> query(
|
Future<List<List>> query(
|
||||||
String query, Map<String, dynamic> substitutionValues,
|
String tableName, String query, Map<String, dynamic> substitutionValues,
|
||||||
[List<String> returningFields]) {
|
[List<String> returningFields]) {
|
||||||
return _pool.withResource(() async {
|
return _pool.withResource(() async {
|
||||||
var executor = await _next();
|
var executor = await _next();
|
||||||
return executor.query(query, substitutionValues, returningFields);
|
return executor.query(
|
||||||
|
tableName, query, substitutionValues, returningFields);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name: angel_orm_postgres
|
name: angel_orm_postgres
|
||||||
version: 1.0.0-dev.2
|
version: 1.0.0-dev.3
|
||||||
description: PostgreSQL support for Angel's ORM. Includes functionality for querying and transactions.
|
description: PostgreSQL support for Angel's ORM. Includes functionality for querying and transactions.
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
homepage: https://github.com/angel-dart/orm
|
homepage: https://github.com/angel-dart/orm
|
||||||
|
|
Loading…
Reference in a new issue