toString method
A string representation of this object.
Some classes have a default textual representation,
often paired with a static parse
function (like int.parse).
These classes will provide the textual representation as
their string representation.
Other classes have no meaningful textual representation
that a program will care about.
Such classes will typically override toString
to provide
useful information when inspecting the object,
mainly for debugging or logging.
Implementation
@override
String toString() {
final String toString = '''
// region ${_table.modelName}FilterBuilder
class ${_table.modelName}FilterBuilder extends ConjunctionBase {
${_table.modelName}FilterBuilder(${_table.modelName} obj, bool? getIsDeleted) : super(obj,getIsDeleted) {
_mn${_table.modelName} = obj._mn${_table.modelName};
${_table.objectType == ObjectType.table ? '_softDeleteActivated = obj.softDeleteActivated;' : ''}
}
${_table.objectType == ObjectType.table ? 'bool _softDeleteActivated = false;' : ''}
${_table.modelName}Manager? _mn${_table.modelName};
/// put the sql keyword 'AND'
@override
${_table.modelName}FilterBuilder get and {
super.and;
return this;
}
/// put the sql keyword 'OR'
@override
${_table.modelName}FilterBuilder get or {
super.or;
return this;
}
/// open parentheses
@override
${_table.modelName}FilterBuilder get startBlock {
super.startBlock;
return this;
}
/// String whereCriteria, write raw query without 'where' keyword. Like this: 'field1 like 'test%' and field2 = 3'
@override
${_table.modelName}FilterBuilder where(String? whereCriteria, {dynamic parameterValue}) {
super.where(whereCriteria, parameterValue: parameterValue);
return this;
}
/// page = page number,
/// pagesize = row(s) per page
@override
${_table.modelName}FilterBuilder page(int page, int pagesize) {
super.page(page,pagesize);
return this;
}
/// int count = LIMIT
@override
${_table.modelName}FilterBuilder top(int count) {
super.top(count);
return this;
}
/// close parentheses
@override
${_table.modelName}FilterBuilder get endBlock {
super.endBlock;
return this;
}
/// argFields might be String or List<String>.
/// Example 1: argFields='name, date'
/// Example 2: argFields = ['name', 'date']
@override
${_table.modelName}FilterBuilder orderBy(dynamic argFields) {
super.orderBy(argFields);
return this;
}
/// argFields might be String or List<String>.
/// Example 1: argFields='field1, field2'
/// Example 2: argFields = ['field1', 'field2']
@override
${_table.modelName}FilterBuilder orderByDesc(dynamic argFields) {
super.orderByDesc(argFields);
return this;
}
/// argFields might be String or List<String>.
/// Example 1: argFields='field1, field2'
/// Example 2: argFields = ['field1', 'field2']
@override
${_table.modelName}FilterBuilder groupBy(dynamic argFields) {
super.groupBy(argFields);
return this;
}
/// argFields might be String or List<String>.
/// Example 1: argFields='name, date'
/// Example 2: argFields = ['name', 'date']
@override
${_table.modelName}FilterBuilder having(dynamic argFields) {
super.having(argFields);
return this;
}
${_table.modelName}Field _setField(${_table.modelName}Field? field, String colName, DbType dbtype) {
return ${_table.modelName}Field(this)
..param = DbParameter(
dbType: dbtype,
columnName: colName,
wStartBlock: openedBlock);
}
$_createObjectFieldProperty
${_table.objectType == ObjectType.table ? '''
/// Deletes List<${_table.modelName}> bulk by query
///
/// <returns>BoolResult res.success= true (Deleted), false (Could not be deleted)
@override
Future<BoolResult> delete([bool hardDelete=false]) async {
buildParameters();
var r = BoolResult(success: false);
$_deleteMethodList
if(_softDeleteActivated && !hardDelete) {
r = await _mn${_table.modelName}!.updateBatch(qparams,{'isDeleted':1}); }
else {
r = await _mn${_table.modelName}!.delete(qparams); }
return r;
}
$_recoverMethodList
/// using:
/// update({'fieldName': Value})
/// fieldName must be String. Value is dynamic, it can be any of the (int, bool, String.. )
@override
Future<BoolResult> update(Map<String, dynamic> values) {
buildParameters();
if (qparams.limit! > 0 || qparams.offset! > 0) {
qparams.whereString = '${_table.primaryKeyNames[0]} IN (SELECT ${_table.primaryKeyNames[0]} from ${_table.tableName} \${qparams.whereString!.isNotEmpty ? 'WHERE \${qparams.whereString}': ''}\${qparams.limit!>0 ? ' LIMIT \${qparams.limit}':''}\${qparams.offset!>0 ? ' OFFSET \${qparams.offset}':''})';
}
return _mn${_table.modelName}!.updateBatch(qparams, values);
}''' : ''}
/// This method always returns [${_table.modelName}] Obj if exist, otherwise returns null
${commentPreload.replaceAll('methodname', 'toSingle')}
/// <returns> ${_table.modelName}?
@override
Future<${_table.modelName}?> toSingle({bool preload=false, List<String>? preloadFields, bool loadParents=false, List<String>? loadedFields}) async{
buildParameters(pSize: 1);
final objFuture = _mn${_table.modelName}!.toList(qparams);
final data = await objFuture;
${_table.modelName}? obj;
if (data.isNotEmpty) { obj = ${_table.modelName}.fromMap(data[0] as Map<String, dynamic>);
$_toOnetoOneCollections
$_toOnetoManyCollections
$_createObjectRelationsPreLoad
} else {obj = null;}
return obj;
}
/// This method always returns [${_table.modelName}]
${commentPreload.replaceAll('methodname', 'toSingle')}
/// <returns> ${_table.modelName}?
@override
Future<${_table.modelName}> toSingleOrDefault({bool preload=false, List<String>? preloadFields, bool loadParents=false, List<String>? loadedFields}) async{
return await toSingle(
preload: preload,
preloadFields: preloadFields,
loadParents: loadParents,
loadedFields: loadedFields) ??
${_table.modelName}();
}
/// This method returns int. [${_table.modelName}]
/// <returns>int
@override
Future<int> toCount([VoidCallback Function(int c)? ${_table._modelLowerCase}Count]) async {
buildParameters();
qparams.selectColumns = ['COUNT(1) AS CNT'];
final ${toPluralLowerName(_table._modelLowerCase)}Future = await _mn${_table.modelName}!.toList(qparams);
final int count = ${toPluralLowerName(_table._modelLowerCase)}Future[0]['CNT'] as int;
if(${_table._modelLowerCase}Count != null) {${_table._modelLowerCase}Count (count);}
return count;
}
/// This method returns List<${_table.modelName}> [${_table.modelName}]
${commentPreload.replaceAll('methodname', 'toList')}
/// <returns>List<${_table.modelName}>
@override
Future<List<${_table.modelName}>> toList({bool preload=false, List<String>? preloadFields, bool loadParents=false, List<String>? loadedFields}) async {
final data = await toMapList();
final List<${_table.modelName}> ${toPluralLowerName(_table._modelLowerCase)}Data = await ${_table.modelName}.fromMapList(data,preload: preload, preloadFields: preloadFields, loadParents: loadParents, loadedFields:loadedFields, setDefaultValues: qparams.selectColumns == null);
return ${toPluralLowerName(_table._modelLowerCase)}Data;
}
/// This method returns Json String [${_table.modelName}]
@override
Future<String> toJson() async {
final list = <dynamic>[];
final data = await toList();
for (var o in data) {
list.add(o.toMap(forJson: true));
}
return json.encode(list);
}
/// This method returns Json String. [${_table.modelName}]
@override
Future<String> toJsonWithChilds() async {
final list = <dynamic>[];
final data = await toList();
for (var o in data) {
list.add(await o.toMapWithChildren(false,true));
}
return json.encode(list);
}
/// This method returns List<dynamic>. [${_table.modelName}]
/// <returns>List<dynamic>
@override
Future<List<dynamic>> toMapList() async {
buildParameters();
return await _mn${_table.modelName}!.toList(qparams);
}
${_isFormTable ? '''/// Returns List<DropdownMenuItem<${_table.modelName}>>
Future<List<DropdownMenuItem<${_table.modelName}>>> toDropDownMenu(
String displayTextColumn,
[VoidCallback Function(List<DropdownMenuItem<${_table.modelName}>> o)? dropDownMenu]) async {
buildParameters();
final ${toPluralLowerName(_table._modelLowerCase)}Future = _mn${_table.modelName}!.toList(qparams);
final data = await ${toPluralLowerName(_table._modelLowerCase)}Future;
final int count = data.length;
final List<DropdownMenuItem<${_table.modelName}>> items = []
..add(DropdownMenuItem(
value: ${_table.modelName}(),
child: Text('-'),
));
for (int i = 0; i < count; i++) {
items.add(
DropdownMenuItem(
value: ${_table.modelName}.fromMap(data[i] as Map<String, dynamic>),
child: Text(data[i][displayTextColumn].toString()),
),
);
}
if (dropDownMenu != null) {
dropDownMenu(items);
}
return items;
}
/// Returns List<DropdownMenuItem<${_table.primaryKeyTypes[0]}>>
Future<List<DropdownMenuItem<${_table.primaryKeyTypes[0]}>>> toDropDownMenuInt(
String displayTextColumn,
[VoidCallback Function(List<DropdownMenuItem<${_table.primaryKeyTypes[0]}>> o)? dropDownMenu]) async {
buildParameters();
qparams.selectColumns=['${_table.primaryKeyNames[0]}',displayTextColumn];
final ${toPluralLowerName(_table._modelLowerCase)}Future = _mn${_table.modelName}!.toList(qparams);
final data = await ${toPluralLowerName(_table._modelLowerCase)}Future;
final int count = data.length;
final List<DropdownMenuItem<${_table.primaryKeyTypes[0]}>> items = []
..add(DropdownMenuItem(
value: ${_table.primaryKeyTypes[0] == 'int' ? '0' : '\'0\''},
child: Text('-'),
));
for (int i = 0; i < count; i++) {
items.add(
DropdownMenuItem(
value: data[i]['${_table.primaryKeyNames[0]}']${_table.primaryKeyTypes[0] == 'int' ? ' as int' : '.toString()'},
child: Text(data[i][displayTextColumn].toString()),
),
);
}
if (dropDownMenu != null) {
dropDownMenu(items);
}
return items;
}
''' : ''}
/// This method returns Primary Key List SQL and Parameters retVal = Map<String,dynamic>. [${_table.modelName}]
/// retVal['sql'] = SQL statement string, retVal['args'] = whereArguments List<dynamic>;
/// <returns>List<String>
@override
Map<String,dynamic> toListPrimaryKeySQL([bool buildParams = true]) {
final Map<String,dynamic> _retVal = <String,dynamic>{};
if (buildParams) {
buildParameters();
}
_retVal['sql'] = 'SELECT `${_table.primaryKeyNames.join('`')}` FROM ${_table.tableName} WHERE \${qparams.whereString}';
_retVal['args'] = qparams.whereArguments;
return _retVal;
}
${_table.primaryKeyNames.length > 1 ? '''/// This method returns Primary Key List<${_table.primaryKeyNames.join(',')}> [${_table.modelName}]
/// <returns>List<${_table.primaryKeyNames.join(',')}>
@override
Future<List<${_table.modelName}>> toListPrimaryKey(
[bool buildParams = true]) async {
if (buildParams)
{buildParameters();}
qparams.selectColumns = ['${_table.primaryKeyNames.join('\',\'')}'];
final ${_table._modelLowerCase}Future =
await _mn${_table.modelName}!.toList(qparams);
return await ${_table.modelName}.fromMapList(${_table._modelLowerCase}Future);
}''' : _table.primaryKeyNames.length == 1 ? '''/// This method returns Primary Key List<${_table.primaryKeyTypes[0]}>.
/// <returns>List<${_table.primaryKeyTypes[0]}>
@override
Future<List<${_table.primaryKeyTypes[0]}>> toListPrimaryKey([bool buildParams=true]) async {
if(buildParams)
{buildParameters();}
final List<${_table.primaryKeyTypes[0]}> ${_table.primaryKeyNames[0]}Data = <${_table.primaryKeyTypes[0]}>[];
qparams.selectColumns= ['${_table.primaryKeyNames[0]}'];
final ${_table.primaryKeyNames[0]}Future = await _mn${_table.modelName}!.toList(qparams);
final int count = ${_table.primaryKeyNames[0]}Future.length;
for (int i = 0; i < count; i++) {
${_table.primaryKeyNames[0]}Data.add(${_table.primaryKeyNames[0]}Future[i]['${_table.primaryKeyNames[0]}'] as ${_table.primaryKeyTypes[0]});
}
return ${_table.primaryKeyNames[0]}Data;
}''' : ''}
/// Returns List<dynamic> for selected columns. Use this method for 'groupBy' with min,max,avg.. [${_table.modelName}]
/// Sample usage: (see EXAMPLE 4.2 at https://github.com/hhtokpinar/sqfEntity#group-by)
@override
Future<List<dynamic>> toListObject() async {
buildParameters();
final objectFuture = _mn${_table.modelName}!.toList(qparams);
final List<dynamic> objectsData = <dynamic>[];
final data = await objectFuture;
final int count = data.length;
for (int i = 0; i < count; i++) {
objectsData.add(data[i]);
}
return objectsData;
}
/// Returns List<String> for selected first column
/// Sample usage: await ${_table.modelName}.select(columnsToSelect: ['columnName']).toListString()
@override
Future<List<String>> toListString([VoidCallback Function(List<String> o)? listString]) async {
buildParameters();
final objectFuture = _mn${_table.modelName}!.toList(qparams);
final List<String> objectsData = <String>[];
final data = await objectFuture;
final int count = data.length;
for (int i = 0; i < count; i++) {
objectsData.add(data[i][qparams.selectColumns![0]].toString());
}
if (listString != null) {listString(objectsData);}
return objectsData;
}
}
// endregion ${_table.modelName}FilterBuilder
''';
return toString;
}