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

createQueryReader() is not returning data before saveChanges() is called #7697

Open
JulijaRamoskiene opened this issue Feb 12, 2025 · 4 comments

Comments

@JulijaRamoskiene
Copy link

JulijaRamoskiene commented Feb 12, 2025

Description

createQueryReader() is not returning inserted data before saveChanges is called.

Reproduce steps

To reproduce, execute code similar to this:

  async function logCounts(iModelDb: IModelDb) {
      const ecsql = "SELECT Count(*) as C FROM bis.Subject where CodeValue='S1'";

      const result = iModelDb.withPreparedStatement(ecsql, stmt => {
          if (DbResult.BE_SQLITE_ROW === stmt.step()) {
              return stmt.getValue(0).getInteger();
          }
          return 0;
      });
      console.log(`withPreparedStatement returned: ${result}`);

      for await (const row of iModelDb.createQueryReader(ecsql )) {
          console.log(`createQueryReader returned:  ${row.C}`);
      }
  }

  // Use your preffered way to create empty iModel e.g. SnapshotDb.createEmpty()

  Subject.insert(iModelDb, IModel.rootSubjectId, "S1");
  console.log("before saving changes");
  await logCounts(iModelDb);
  iModelDb.saveChanges();
  console.log("after saving changes");
  await logCounts(iModelDb);

Results

It prints:

before saving changes
withPreparedStatement returned: 1
createQueryReader returned: 0
after saving changes
withPreparedStatement returned: 1
createQueryReader returned: 1

Expected results

createQueryReader() should query inserted data. Same as withPreparedStatement(), which returns data even if saveChanges() was not called yet.

Package version

  • iTwin.js Version 4.10.2
@JulijaRamoskiene JulijaRamoskiene changed the title createQueryReader() is not returning data before 'saveChanges()' is called createQueryReader() is not returning data before saveChanges() is called Feb 12, 2025
@grigasp
Copy link
Member

grigasp commented Feb 12, 2025

Did you try passing usePrimaryConn flag to createQueryReader 3rd arg?

Also adding @khanaffan

@JulijaRamoskiene
Copy link
Author

Adding that flag worked. Thanks @grigasp

@JulijaRamoskiene
Copy link
Author

Wondering if documentation could be improved to state this more clearly? For example here: https://www.itwinjs.org/learning/ecsqlcodeexamples/

@grigasp
Copy link
Member

grigasp commented Feb 12, 2025

Wondering if documentation could be improved to state this more clearly? For example here: https://www.itwinjs.org/learning/ecsqlcodeexamples/

@ColinKerr

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants