cypher-dsl

A Java DSL (Builder) for the Cypher Query Language

APACHE-2.0 License

Stars
188
Committers
29

Bot releases are hidden (Show)

cypher-dsl - Latest Release

Published by michael-simons 3 months ago

πŸŽ‰ The big party release! πŸŽ‰

With this release we move the repository from github.com/neo4j-contrib to github.com/neo4j with Neo4j adding Cypher-DSL to the list of supported modules.
What we have now on our todo list is to incorporate our documentation into the official Neo4j docs, but apart from that, little will change immediate. Even our Maven coordinates will stay the same. You can however rely on the fact that Cypher-DSL is not going anywhere anytime soon.

Thanks to @stumoore for supporting this!

πŸ› Bug Fixes

  • Don’t introduce new names in pattern expressions. (#1017)

🧹 Housekeeping

  • Dependency upgrades
    • Bump io.projectreactor:reactor-bom (#1025)
    • Bump org.checkerframework:checker-qual (#1024)
    • Bump com.fasterxml.jackson:jackson-bom (#1023)
    • Bump org.moditect:moditect-maven-plugin (#1019)
    • Bump org.asciidoctor:asciidoctorj-diagram (#1021)
    • Bump org.junit:junit-bom from 5.10.2 to 5.10.3 (#1020)
    • Bump org.neo4j.driver:neo4j-java-driver (#1018)
    • Bump org.springframework.boot:spring-boot-starter-parent (#1016)
    • Bump org.apache.maven.plugins:maven-jar-plugin (#1015)

πŸ›  Build

  • Change license for examples that depend on the parser to Apache 2.0, too.
cypher-dsl -

Published by michael-simons 4 months ago

πŸ› Bug Fixes

  • Don’t introduce new names in pattern expressions. (#1017)
cypher-dsl -

Published by michael-simons 4 months ago

This is a pure bug-fix release. Thanks to @Andy2003 for spotting yet another scoping issue.

πŸ› Bug Fixes

  • Include implicit new variables in seed for name generator. (#999)

🧹 Housekeeping

  • Dependency upgrades:
    • Bump io.projectreactor:reactor-bom (#1013)
    • Bump org.springframework.data:spring-data-neo4j (#1012)
    • Bump org.apache.maven.plugins:maven-failsafe-plugin (#1011)
    • Bump org.apache.maven.plugins:maven-surefire-plugin (#1010)
cypher-dsl -

Published by michael-simons 4 months ago

We're finally going 2024 with this release.
The biggest new feature in this release is that we now allow chaining statements that end with a YIELD clause, which lets you compose complex queries in a nicer way.

We also removed all deprecated constructs and methods we accumulated until now. If you ignored the warnings until now, you cannot do any longer. The latest SDN release is prepared for this Cypher-DSL release already, as we did the necessary changes over there already (See this https://github.com/spring-projects/spring-data-neo4j/commit/2861e771333d8b9443026669763ddccd5be7659d[commit] for the necessary changes for example).

πŸš€ Features

  • Allow chaining statements to yielding calls. (#964)
  • Allow chainable foreach. (#988)

πŸ› Bug Fixes

  • Actually make sortOrderDefaultExpression test what it is supposed to test.

🧹 Housekeeping

  • Dependency upgrades:
    • Bump org.apache.maven.plugins:maven-shade-plugin (#1006)
    • Bump org.neo4j.driver:neo4j-java-driver (#1005)
    • Bump org.sonarsource.scanner.maven:sonar-maven-plugin (#1004)
    • Bump com.google.guava:guava (#1003)
    • Bump org.apache.maven.plugins:maven-enforcer-plugin (#1002)
    • Bump org.apache.maven.plugins:maven-javadoc-plugin (#1001)
    • Bump com.github.ekryd.sortpom:sortpom-maven-plugin (#992)
    • Bump org.assertj:assertj-core from 3.25.3 to 3.26.0 (#998)
    • Bump org.springframework.boot:spring-boot-starter-parent (#997)
    • Bump com.puppycrawl.tools:checkstyle (#996)
    • Bump org.codehaus.mojo:exec-maven-plugin (#995)
    • Bump org.asciidoctor:asciidoctorj from 2.5.12 to 2.5.13 (#993)
    • Bump org.springframework.data:spring-data-neo4j (#991)
    • Bump io.projectreactor:reactor-bom (#990)
    • Bump org.graalvm.buildtools:native-maven-plugin (#989)
    • Bump com.mycila:license-maven-plugin from 4.3 to 4.5 (#987)
    • Bump mockito.version from 5.11.0 to 5.12.0 (#986)
    • Bump testcontainers.version from 1.19.7 to 1.19.8 (#985)
    • Bump com.google.guava:guava (#982)
    • Bump org.checkerframework:checker-qual (#984)
    • Bump org.apache.maven.plugins:maven-install-plugin (#983)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#981)
    • Bump com.fasterxml.jackson:jackson-bom (#980)
    • Bump org.apache.maven.plugins:maven-deploy-plugin (#979)
cypher-dsl -

Published by michael-simons 6 months ago

Not everything goes as planned ;) Another 2023.9 release, enjoy.

πŸ› Bug Fixes

  • Use proper generics when generating extensible models. (#974)
  • Treat the asterisk correctly in an importing with. (#973)

🧹 Housekeeping

  • Dependency upgrades:
    • Bump org.neo4j.driver:neo4j-java-driver (#978)
    • Bump org.apache.maven.plugins:maven-shade-plugin (#977)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#976)
    • Bump com.puppycrawl.tools:checkstyle (#975)
    • Bump neo4j.version from 5.18.1 to 5.19.0 (#965)
    • Bump com.tngtech.archunit:archunit from 1.2.1 to 1.3.0 (#966)
    • Bump org.springframework.data:spring-data-neo4j (#967)
    • Bump io.projectreactor:reactor-bom (#968)
    • Bump org.springframework.boot:spring-boot-starter-parent (#971)
    • Bump org.apache.maven.plugins:maven-jar-plugin (#972)
cypher-dsl -

Published by michael-simons 6 months ago

Heads up this is the last planned release in the 2023.x series.
The next release will be 2024.0.0, in which all deprecations apart from internalId on nodes and relationships will be removed.
With that change, the Cypher-DSL will have one single entry point for all operations: org.neo4j.cypherdsl.core.Cypher.

Nothing will change in terms of JDK compatibility.
Cypher-DSL 2024 will still require JDK 17, and will run just fine on JDK 21 and higher.

πŸš€ Features

  • Allow calling of raw Cypher strings in sub queries. (#961)

🧹 Housekeeping

  • Dependency upgrades:
    • Bump org.jacoco:jacoco-maven-plugin from 0.8.11 to 0.8.12 (#960)
    • Bump org.neo4j.driver:neo4j-java-driver (#959)
    • Bump org.apache.maven.plugins:maven-source-plugin (#958)
    • Bump com.puppycrawl.tools:checkstyle (#957)
    • Bump org.moditect:moditect-maven-plugin (#956)
    • Bump neo4j.version from 5.18.0 to 5.18.1 (#955)
    • Bump org.ow2.asm:asm from 9.6 to 9.7 (#954)
    • Bump org.springframework.boot:spring-boot-starter-parent (#953)
cypher-dsl -

Published by michael-simons 6 months ago

πŸš€ Features

  • Allow calling of raw Cypher strings in sub queries. (Backport from 2023.x)

πŸ› Bug Fixes

  • Driving symbolic names for list predicate function must not be scoped. (#905)

πŸ”„οΈ Refactorings

  • Allow unit-subqueries (Backport from 2023.x)

🧰 Tasks

  • Extend license header to 2024.

🧹 Housekeeping

  • Dependency upgrades:
    • Bump spring-boot-starter-parent from 2.7.5 to 2.7.18
    • Update Spring Data Neo4j from 6.3.14 to 6.3.18
    • Bump reactor-bom from 2022.0.2 to 2022.0.15
    • Update Neo4j from 4.4.23 to 4.4.29
    • Update Neo4j Java Driver from 4.4.12 to 4.4.13
    • Update Neo4j Java Driver from 4.4.13 to 4.4.15
    • Bump testcontainers.version from 1.17.6 to 1.19.7
cypher-dsl -

Published by michael-simons 7 months ago

πŸš€ Features

  • Add a bom project

🧹 Housekeeping

  • Dependency upgrades:
    • Bump org.springframework.data:spring-data-neo4j
    • Bump neo4j.version from 5.17.0 to 5.18.0 (#944)
    • Bump com.google.guava:guava (#952)
    • Bump io.projectreactor:reactor-bom (#951)
    • Bump org.asciidoctor:asciidoctorj from 2.5.11 to 2.5.12 (#950)
    • Bump com.fasterxml.jackson:jackson-bom (#949)
    • Bump org.sonarsource.scanner.maven:sonar-maven-plugin (#947)
    • Bump org.moditect:moditect-maven-plugin (#946)
    • Bump com.puppycrawl.tools:checkstyle (#945)
    • Bump testcontainers.version from 1.19.6 to 1.19.7 (#942)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#941)
    • Bump com.fasterxml.jackson:jackson-bom (#940)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#938)
    • Bump org.neo4j.driver:neo4j-java-driver (#937)
    • Bump com.puppycrawl.tools:checkstyle (#936)
    • Bump mockito.version from 5.10.0 to 5.11.0 (#935)
cypher-dsl -

Published by michael-simons 8 months ago

Change parser license to The Apache Software License, Version 2.0 (same as the Neo4j JavaCC based parser, which we use under the hoods).

Thanks a lot @hindog, @fbiville and @Andy2003 for agreeing to relicense your contributions, too.

πŸ“– Documentation

  • Use compile scope in Gradle dependencies.

🧹 Housekeeping

  • Dependency upgrades:
    • Bump neo4j.version from 5.16.0 to 5.17.0 (#933)
    • Bump testcontainers.version from 1.19.5 to 1.19.6 (#934)
    • Bump org.apache.maven.plugins:maven-shade-plugin (#932)
    • Bump org.springframework.boot:spring-boot-starter-parent (#931)
    • Bump org.graalvm.buildtools:native-maven-plugin (#930)
    • Bump org.codehaus.mojo:exec-maven-plugin (#929)
    • Bump org.asciidoctor:asciidoctor-maven-plugin (#927)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#928)
    • Bump org.springframework.data:spring-data-neo4j (#926)
    • Bump io.projectreactor:reactor-bom (#925)
    • Bump org.asciidoctor:asciidoctorj-diagram (#924)
    • Bump org.graalvm.buildtools:native-maven-plugin (#919)
    • Bump org.assertj:assertj-core from 3.25.2 to 3.25.3 (#918)
    • Bump org.asciidoctor:asciidoctorj-diagram (#916)
    • Bump org.junit:junit-bom from 5.10.1 to 5.10.2 (#915)
    • Bump testcontainers.version from 1.19.4 to 1.19.5 (#923)
    • Bump org.asciidoctor:asciidoctor-maven-plugin (#922)
    • Bump org.neo4j.driver:neo4j-java-driver (#920)
    • Bump joda-time:joda-time from 2.12.6 to 2.12.7 (#917)
cypher-dsl -

Published by michael-simons 9 months ago

πŸš€ Features

  • Add a parser option to unify the direction of relationships. (#906)

πŸ› Bug Fixes

  • Driving symbolic names for list predicate function must not be scoped. (#905)

🧹 Housekeeping

  • Dependency upgrades:
    • Bump neo4j.version from 5.15.0 to 5.16.0 (#910)
    • Bump org.assertj:assertj-core from 3.25.1 to 3.25.2 (#914)
    • Bump com.querydsl:querydsl-core from 5.0.0 to 5.1.0 (#913)
    • Bump mockito.version from 5.9.0 to 5.10.0 (#912)
    • Bump com.puppycrawl.tools:checkstyle (#911)
    • Bump testcontainers.version from 1.19.3 to 1.19.4 (#909)
    • Bump org.springframework.boot:spring-boot-starter-parent (#904)
cypher-dsl -

Published by michael-simons 9 months ago

Please read the updated stance wrt calver/semver in the README. This release is current and the first one in 2024, including some new, additive and non-breaking features contributed by @Andy2003

πŸš€ Features

  • Add possibility to define inheritance for the static model. (#894)

πŸ”„οΈ Refactorings

  • Allow unit-subqueries. (#895)

πŸ“– Documentation

  • Clarify calver and semver wording.

🧰 Tasks

  • Extend license header to 2024.

🧹 Housekeeping

  • Dependency upgrades:
    • Bump org.asciidoctor:asciidoctor-maven-plugin (#902)
    • Bump org.apache.maven.plugins:maven-failsafe-plugin (#901)
    • Bump mockito.version from 5.8.0 to 5.9.0 (#900)
    • Bump org.codehaus.mojo:flatten-maven-plugin (#899)
    • Bump org.springframework.data:spring-data-neo4j (#898)
    • Bump io.projectreactor:reactor-bom (#897)
    • Bump org.apache.maven.plugins:maven-surefire-plugin (#896)
    • Bump org.assertj:assertj-core from 3.25.0 to 3.25.1 (#893)
    • Bump org.neo4j.driver:neo4j-java-driver (#892)
    • Bump joda-time:joda-time from 2.12.5 to 2.12.6 (#891)
    • Bump org.asciidoctor:asciidoctorj-diagram (#890)
    • Bump com.fasterxml.jackson:jackson-bom (#887)
    • Bump org.assertj:assertj-core from 3.24.2 to 3.25.0 (#889)
    • Bump com.puppycrawl.tools:checkstyle (#888)
    • Bump org.asciidoctor:asciidoctorj from 2.5.10 to 2.5.11 (#886)
    • Bump com.google.guava:guava (#885)
    • Bump org.springframework.boot:spring-boot-starter-parent (#884)
cypher-dsl -

Published by michael-simons 10 months ago

πŸ› Bug Fixes

  • for #840 add missing casts in constructor super calls for relations with generic start or / and end node (#866)

πŸ”„οΈ Refactorings

  • Officially allow label value to be accessed.

🧹 Housekeeping

  • Dependency upgrades:
    • Bump neo4j.version from 5.14.0 to 5.15.0 (#880)
    • Bump org.checkerframework:checker-qual (#883)
    • Bump io.projectreactor:reactor-bom (#882)
    • Bump org.springframework.data:spring-data-neo4j (#881)
    • Bump org.apache.maven.plugins:maven-surefire-plugin (#879)
    • Bump org.apache.maven.plugins:maven-failsafe-plugin (#878)
    • Bump com.puppycrawl.tools:checkstyle (#876)
    • Bump net.java.dev.jna:jna from 5.13.0 to 5.14.0 (#877)
    • Bump org.checkerframework:checker-qual (#875)
    • Bump org.apache.maven.plugins:maven-javadoc-plugin (#874)
    • Bump org.neo4j.driver:neo4j-java-driver (#873)
    • Bump com.tngtech.archunit:archunit from 1.2.0 to 1.2.1 (#872)
    • Bump mockito.version from 5.7.0 to 5.8.0 (#871)
    • Bump neo4j.version from 5.13.0 to 5.14.0 (#868)
    • Bump testcontainers.version from 1.19.2 to 1.19.3 (#867)
cypher-dsl -

Published by michael-simons 11 months ago

2023.9 contains several new features: It brings support for parsing and rendering Quantified Path Patterns (QPP), shifts to a single, easy to find main entry point to the DSL via just Cypher and makes the static code generator a bit more powerful.

While QPP are a powerful feature (have a look at "Getting From Denmark Hill to Gatwick Airport With Quantified Path Patterns" to see what you can do with them), I find them a bit hard to read, with all the parentheses and I did not expect them to really fit in well with our builder. However, it turned out that the elements we need to provide in our own AST to render what we parsed do work well: If you decide to build QPP with Cypher-DSL, you can now quantify relationship patterns as a whole or only the relationship, making up already for many uses cases.

The single entry point to our API makes the whole system a lot more discoverable.
@lukaseder did create a ticket for that in the beginning of 2023 and if someone knows the importance of that, he is that someone as the creator of jOOQ.
Thank you, Lukas and of course earlier this week, @Andy2003 for actually doing the work of adding all those methods to Cypher.

If you don't care about deprecation warnings, 2023.9.0 will be a drop-in replacement.
The existing entry points won't go away until the next major release, in which they will be made package private.
Until then, they are deprecated.

It my sound like a broken record by now, but again: Thank you, @zakjan and @ikwattro for your input on QPP, now we are waiting for your bug-reports.

πŸš€ Features

  • Provide a single DSL API entry point. (#862)
  • Allow parsing of collect expression. (#861)
  • Add support for quantified path patterns. (#860)
  • Add support for predicates inside pattern elements. (#859)
  • Add ability to add additional factory methods for relationship models to a node in the static model (#840)

πŸ“– Documentation

  • Add example how to access properties of a list element.

🧹 Housekeeping

  • Dependency upgrades:
    • Bump spring-boot-starter-parent from 3.1.5 to 3.2.0
    • Bump auto-common to 1.2.2
    • Bump errorprone from 2.12.1 to 2.23.0
    • Bump sortpom from 2.15.0 to 3.3.0
    • Bump com.opencsv:opencsv from 5.8 to 5.9
    • Bump testcontainers.version from 1.19.2 to 1.19.3
    • Bump testcontainers.version from 1.19.1 to 1.19.2 (#857)
    • Bump org.codehaus.mojo:exec-maven-plugin (#856)
    • Bump io.projectreactor:reactor-bom (#855)
    • Bump com.puppycrawl.tools:checkstyle (#854)
    • Bump com.fasterxml.jackson:jackson-bom (#853)
    • Bump org.jetbrains:annotations from 24.0.1 to 24.1.0 (#852)
    • Bump org.springframework.data:spring-data-neo4j (#851)
    • Bump org.apache.maven.plugins:maven-surefire-plugin (#850)
    • Bump org.apache.maven.plugins:maven-failsafe-plugin (#849)
    • Bump org.apache.maven.plugins:maven-javadoc-plugin (#848)
cypher-dsl -

Published by michael-simons 12 months ago

πŸ› Bug Fixes

  • Including aliasing in scoping strategy, too. (#839)

🧹 Housekeeping

  • Dependency upgrades:
    • Bump org.moditect:moditect-maven-plugin (#843)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#845)
    • Bump com.tngtech.archunit:archunit from 1.1.0 to 1.2.0 (#846)
    • Bump org.checkerframework:checker-qual (#844)
    • Bump mockito.version from 5.6.0 to 5.7.0 (#842)
    • Bump org.junit:junit-bom from 5.10.0 to 5.10.1 (#841)
cypher-dsl -

Published by michael-simons 12 months ago

This minor release is drop-in compatible with 2023.7, but it adds support for using COLLECT {} sub-queries, which required enhancing some interfaces (that only we should implement, but still, it's a minor upgrade then).

The price for finding the most bugs in the scoping strategy applied for sub-queries in this release goes to @Andy2003, thank you!

πŸš€ Features

  • Add support for COLLECT subqueries. (#831)
  • Make fieldname generator configurable. (#830)

πŸ› Bug Fixes

  • Make sure local scope is cleared after leaving subquery expressions. (#837)
  • Recognize entities defined in sub-queries correctly. (#827)

🧹 Housekeeping

  • Dependency upgrades:
    • Bump org.apache.maven.plugins:maven-surefire-plugin (#836)
    • Bump org.apache.maven.plugins:maven-failsafe-plugin (#835)
    • Bump org.apache.maven.plugins:maven-checkstyle-plugin (#834)
    • Bump org.neo4j.driver:neo4j-java-driver (#833)
    • Bump org.neo4j:neo4j-cypher-javacc-parser from 5.12.0 to 5.13.0 (#821)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#823)
    • Bump org.graalvm.buildtools:native-maven-plugin (#824)
    • Bump org.jacoco:jacoco-maven-plugin from 0.8.10 to 0.8.11 (#822)
    • Bump org.springframework.boot:spring-boot-starter-parent (#820)

πŸ›  Build

  • Remove explicit management of bytebuddy. (#828)
cypher-dsl -

Published by michael-simons about 1 year ago

Thanks to @jrsperry for a great bug-report and the fix for includesAll and includesAny.

πŸ› Bug Fixes

  • Apply the correct includesAll and includesAny semantics (#819)

🧹 Housekeeping

  • Dependency upgrades:
    • Bump mockito.version from 5.5.0 to 5.6.0 (#812)
    • Bump org.springframework.data:spring-data-neo4j (#817)
    • Bump com.google.guava:guava (#816)
    • Bump org.checkerframework:checker-qual (#809)
    • Bump net.bytebuddy:byte-buddy-parent from 1.14.8 to 1.14.9 (#818)
    • Bump io.projectreactor:reactor-bom (#815)
    • Bump com.fasterxml.jackson:jackson-bom (#814)
    • Bump org.neo4j.driver:neo4j-java-driver (#811)
    • Bump testcontainers.version from 1.19.0 to 1.19.1 (#810)
    • Bump com.puppycrawl.tools:checkstyle (#807)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#808)
    • Bump org.ow2.asm:asm from 9.5 to 9.6 (#806)
    • Bump com.mycila:license-maven-plugin from 4.2.rc2 to 4.3 (#805)
    • Bump org.springframework.boot:spring-boot-starter-parent (#804)
    • Bump org.apache.maven.plugins:maven-shade-plugin (#803)
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#802)
    • Bump org.graalvm.buildtools:native-maven-plugin (#800)
    • Bump io.projectreactor:reactor-bom (#799)
    • Bump org.neo4j:neo4j-cypher-javacc-parser (#798)
    • Bump org.springframework.data:spring-data-neo4j (#797)
    • Bump org.sonarsource.scanner.maven:sonar-maven-plugin (#796)
    • Bump org.asciidoctor:asciidoctorj-diagram (#795)
    • Bump org.apache.maven.plugins:maven-javadoc-plugin (#794)
    • Bump com.opencsv:opencsv from 5.7.1 to 5.8 (#793)
    • Bump org.apache.maven.plugins:maven-enforcer-plugin (#792)
    • Bump org.graalvm.buildtools:native-maven-plugin (#791)

πŸ›  Build

  • Upgrade Maven wrapper to ASF wrapper 3.2.0 and Maven 3.9.4
  • Build and release with Java 21 targeting Java 17. (#801)
cypher-dsl -

Published by michael-simons about 1 year ago

πŸ› Bug Fixes

  • Apply the correct includesAll and includesAny semantics (#819)
cypher-dsl -

Published by michael-simons about 1 year ago

πŸ› Bug Fixes

  • Apply the correct includesAll and includesAny semantics (#819)
cypher-dsl -

Published by michael-simons about 1 year ago

πŸš€ Features

  • Add basic schema enforcement when rendering statements (experimental).
  • Add basic support for parsing negated types.
  • Add basic support for parenthesized path patterns.
cypher-dsl -

Published by michael-simons about 1 year ago

πŸš€ Features

  • Add isEmpty(). (#784)

πŸ› Bug Fixes

  • Use unmodifiable maps instead of copyOf to allow null parameters. (#789)

πŸ”„οΈ Refactorings

  • Add tests demonstrating prevention of function calls.

🧹 Housekeeping

  • Dependency upgrades:
    • Bump com.github.siom79.japicmp:japicmp-maven-plugin (#788)
    • Bump org.neo4j.driver:neo4j-java-driver (#787)
    • Bump org.checkerframework:checker-qual (#786)
    • Bump org.springframework.boot:spring-boot-starter-parent (#783)
    • Bump com.puppycrawl.tools:checkstyle (#782)
    • Bump mockito.version from 5.4.0 to 5.5.0 (#781)
    • Bump org.graalvm.buildtools:native-maven-plugin (#780)
    • Bump testcontainers.version from 1.18.3 to 1.19.0 (#779)
    • Bump org.apache.maven.plugins:maven-enforcer-plugin (#778)
    • Bump org.springframework.data:spring-data-neo4j (#775)
    • Bump org.neo4j:neo4j-cypher-javacc-parser (#774)
    • Bump io.projectreactor:reactor-bom (#773)
    • Bump com.tngtech.archunit:archunit from 1.0.1 to 1.1.0 (#772)
    • Bump org.asciidoctor:asciidoctorj-diagram (#771)
    • Bump org.graalvm.buildtools:native-maven-plugin (#770)

Thanks to @zakjan for a great bug-report again and ofc @ikwattro for your ongoing support and feedback.