Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] fromJson factory on generated '...Result` types. #630

Open
RoarGronmo opened this issue Jul 5, 2023 · 0 comments
Open

[FEATURE] fromJson factory on generated '...Result` types. #630

RoarGronmo opened this issue Jul 5, 2023 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@RoarGronmo
Copy link

RoarGronmo commented Jul 5, 2023

Normally there are created fromJson factories in the generated code, which is very conventient to use when iterating through columns with map:

This factory (which is generated):

factory OrdLn.fromJson(Map<String, dynamic> json,
      {ValueSerializer? serializer}) {
    serializer ??= driftRuntimeOptions.defaultSerializer;
    return OrdLn(
      readTime: serializer.fromJson<int>(json['readTime']),
      frmNo: serializer.fromJson<int>(json['frmNo']),
      ordNo: serializer.fromJson<int>(json['ordNo']),
      lnNo: serializer.fromJson<int>(json['lnNo']),
      r1: serializer.fromJson<int?>(json['r1']),
      r3: serializer.fromJson<int?>(json['r3']),
      r4: serializer.fromJson<int?>(json['r4']),
      r5: serializer.fromJson<int?>(json['r5']),
      r10: serializer.fromJson<String?>(json['r10']),
      r11: serializer.fromJson<String?>(json['r11']),
      empNo: serializer.fromJson<int?>(json['empNo']),
      prodPrG2: serializer.fromJson<int?>(json['prodPrG2']),
      prodTp3: serializer.fromJson<int?>(json['prodTp3']),
      un: serializer.fromJson<int?>(json['un']),
      cfDelDt: serializer.fromJson<int?>(json['cfDelDt']),
      ordTp: serializer.fromJson<int?>(json['ordTp']),
      finDt: serializer.fromJson<int?>(json['finDt']),
      delDt: serializer.fromJson<int?>(json['delDt']),
      durDt: serializer.fromJson<int?>(json['durDt']),
      invoMth: serializer.fromJson<int?>(json['invoMth']),
      refNo: serializer.fromJson<int?>(json['refNo']),
      editPref: serializer.fromJson<int?>(json['editPref']),
      prodNo: serializer.fromJson<String?>(json['prodNo']),
      descr: serializer.fromJson<String?>(json['descr']),
      finBy: serializer.fromJson<String?>(json['finBy']),
      invoNo: serializer.fromJson<String?>(json['invoNo']),
      noReg: serializer.fromJson<double?>(json['noReg']),
      admTm: serializer.fromJson<double?>(json['admTm']),
      price: serializer.fromJson<double?>(json['price']),
      noInvAb: serializer.fromJson<double?>(json['noInvAb']),
      am: serializer.fromJson<double?>(json['am']),
      noFin: serializer.fromJson<double?>(json['noFin']),
      dc1P: serializer.fromJson<double?>(json['dc1P']),
      free1: serializer.fromJson<double?>(json['free1']),
      free3: serializer.fromJson<double?>(json['free3']),
      ordLnHash: serializer.fromJson<String?>(json['ordLnHash']),
    );
  }
  @override
  Map<String, dynamic> toJson({ValueSerializer? serializer}) {
    serializer ??= driftRuntimeOptions.defaultSerializer;
    return <String, dynamic>{
      'readTime': serializer.toJson<int>(readTime),
      'frmNo': serializer.toJson<int>(frmNo),
      'ordNo': serializer.toJson<int>(ordNo),
      'lnNo': serializer.toJson<int>(lnNo),
      'r1': serializer.toJson<int?>(r1),
      'r3': serializer.toJson<int?>(r3),
      'r4': serializer.toJson<int?>(r4),
      'r5': serializer.toJson<int?>(r5),
      'r10': serializer.toJson<String?>(r10),
      'r11': serializer.toJson<String?>(r11),
      'empNo': serializer.toJson<int?>(empNo),
      'prodPrG2': serializer.toJson<int?>(prodPrG2),
      'prodTp3': serializer.toJson<int?>(prodTp3),
      'un': serializer.toJson<int?>(un),
      'cfDelDt': serializer.toJson<int?>(cfDelDt),
      'ordTp': serializer.toJson<int?>(ordTp),
      'finDt': serializer.toJson<int?>(finDt),
      'delDt': serializer.toJson<int?>(delDt),
      'durDt': serializer.toJson<int?>(durDt),
      'invoMth': serializer.toJson<int?>(invoMth),
      'refNo': serializer.toJson<int?>(refNo),
      'editPref': serializer.toJson<int?>(editPref),
      'prodNo': serializer.toJson<String?>(prodNo),
      'descr': serializer.toJson<String?>(descr),
      'finBy': serializer.toJson<String?>(finBy),
      'invoNo': serializer.toJson<String?>(invoNo),
      'noReg': serializer.toJson<double?>(noReg),
      'admTm': serializer.toJson<double?>(admTm),
      'price': serializer.toJson<double?>(price),
      'noInvAb': serializer.toJson<double?>(noInvAb),
      'am': serializer.toJson<double?>(am),
      'noFin': serializer.toJson<double?>(noFin),
      'dc1P': serializer.toJson<double?>(dc1P),
      'free1': serializer.toJson<double?>(free1),
      'free3': serializer.toJson<double?>(free3),
      'ordLnHash': serializer.toJson<String?>(ordLnHash),
    };
  }

makes it possible to use code like:

var orderLines = snapshot.data as List<OrdLn>?;
var allKeys = orderLines?.first.toJson().keys.toList();

There OrdLn is one of the generated base classes.

But if I add some additional fields in my query, like theese LEFT JOINS:

  'getOrderOrdLns': 'SELECT olt.*, tt_prodPrG2.txt as prodPrG2_txt '
      'FROM ord_lns_table as olt '
      'LEFT JOIN firms_table as ft ON ft.firm_no = olt.frm_no '
      'LEFT JOIN txts_table AS tt_prodPrG2 ON ((tt_prodPrG2.txt_tp = 21) AND (tt_prodPrG2.lang = ft.ctry) AND (tt_prodPrG2.txt_no = olt.prod_pr_g2)) '
      'WHERE ((olt.frm_no = :frmNo) AND (olt.ord_no = :ordNo)) ',

The result will not be OrdLn but GetOrderOrdLnsResult which does not have factory GetOrderOrdLnsResult.fromJson...

sadly this factory is timeconsuming to create manually... and breaks the dynamic with "automagic" creation as it is now.

It would have been VERY convenient if this factory for the ...Result was created too.

@RoarGronmo RoarGronmo added the enhancement New feature or request label Jul 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants