dart-backend / angel

A polished, production-ready backend framework in Dart for the VM, AOT, and Flutter.
https://github.com/dukefirehawk/angel
BSD 3-Clause "New" or "Revised" License
173 stars 21 forks source link

add 'select(List<String> fields)' function to orm_generator. #42

Closed debuggerx01 closed 2 years ago

debuggerx01 commented 2 years ago

In many cases, we do not need to get all the fields of an orm object from the database. So I added a'select(List fields)' method to the code generated by'orm_generator' to specify the fields that need to be obtained.

e.g.

part 'user.g.dart';

@serializable
@orm
abstract class _User extends Model {
  @SerializableField()
  String? get name;

  @SerializableField()
  int? get age;
}

Before:

void main() {
  var userQuery = UserQuery();
  userQuery.getOne(SQLQueryExecutor()).then((value) => print(json
      .encode(value.value.toJson()..removeWhere((_, value) => value == null))));
}
==>
# SELECT id, created_at, updated_at, name, age FROM users
# {"id":"1","created_at":"2022-01-04T20:09:40.151649","updated_at":"2022-01-04T20:09:40.151650","name":"dx","age":29}

After:

void main() {
  var userQuery = UserQuery().select([
    UserFields.name,
    UserFields.age,
  ]);
  userQuery.getOne(SQLQueryExecutor()).then((value) => print(json
      .encode(value.value.toJson()..removeWhere((_, value) => value == null))));
}
==>
# SELECT name, age FROM users
# {"name":"dx","age":29}
dukefirehawk commented 2 years ago

@debuggerx01 Nice feature. I'll do some testing before merging it.