Skip to content

Commit

Permalink
Merge pull request #331 from max-208/24-java
Browse files Browse the repository at this point in the history
Rule EC24 in java
  • Loading branch information
dedece35 authored Jul 26, 2024
2 parents 8af40ff + d21f4a3 commit 970e9b3
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 1 deletion.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- [#308](https://github.com/green-code-initiative/ecoCode/issues/308) Implementing EC24 in Java

### Changed

### Deleted
Expand Down
2 changes: 1 addition & 1 deletion RULES.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Some are applicable for different technologies.
| EC12 | Modify several CSS properties all at once | ESLint key : @ecocode/no-multiple-style-changes /// type : Front-end | | 🚫 ||| 🚫 | 🚫 || 🚫 |
| EC13 | Prefer API collections with pagination | ESLint key : @ecocode/prefer-collections-with-pagination /// type : Back-end | ||||||| 🚫 |
| EC22 | The use of methods for basic operations | Using methods for basic operations consumes additional system resources. The interpreter must in effect and solve the objects and then the methods, just to carry out these simple operations of the language. | [cnumr best practices (3rd edition) BP_048 (no longer exists in edition 4)](https://www.greenit.fr/2019/05/07/ecoconception-web-les-115-bonnes-pratiques-3eme-edition/) | 🚫 | 🚫 | 🚀 | 🚀 | 🚀 | 🚫 | 🚫 |
| EC24 | Limit the number of returns for a SQL query | ESLint key : @ecocode/limit-db-query-results /// type : Back-end | | | 🚀 || 🚀 | 🚀 | 🚀 | 🚫 |
| EC24 | Limit the number of returns for a SQL query | ESLint key : @ecocode/limit-db-query-results /// type : Back-end | | 🚧 | 🚀 || 🚀 | 🚀 | 🚀 | 🚫 |
| EC25 | Do not use an image with empty source attribute | ESLint key : @ecocode/no-empty-image-src-attribute /// type : Front-end | ||||||| 🚀 |
| EC26 | Prefer shorthand CSS notations | ESLint key : @ecocode/prefer-shorthand-css-notations /// type : Front-end | ||||||| 🚫 |
| EC27 | Usage of system.arraycopy to copy arrays | Programs spend most of the time in loops. These can be resource consuming, especially when they integrate heavy processing (IO access). Moreover, the size of the data and processing inside the loops will not allow full use of hardware mechanisms such as the cache or compiler optimization mechanisms. | || 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | 🚫 |
Expand Down
1 change: 1 addition & 0 deletions ecocode-rules-specifications/src/main/rules/EC24/EC24.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
],
"defaultSeverity": "Major",
"compatibleLanguages": [
"JAVA",
"JAVASCRIPT",
"TYPESCRIPT"
]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
:!sectids:

== Why is this an issue?

SQL queries often involve processing large amounts of data, and fetching a large number of rows can consume significant CPU resources.
By limiting the number of rows returned, you reduce the amount of processing that needs to be done by the database engine, which in turn lowers CPU consumption.

Transmitting a large number of rows over a network can be resource-intensive.
By restricting the result set size, you reduce the amount of data that needs to be transferred between the database and the application, improving network efficiency.

If you store data about customers, you certainly don’t need to retrieve information of all at once, because the larger the table will be, the more elements the query will return.

[source,java,data-diff-id="1",data-diff-type="noncompliant"]
----
String query = "SELECT * FROM customers"; // Non-compliant
----

It may therefore be a good idea to limit the results and use pagination, for example.

[source,java,data-diff-id="1",data-diff-type="compliant"]
----
String query = "SELECT id,name,email FROM customers FETCH FIRST 10 ROWS ONLY"; // Compliant
----

== Resources

=== Documentation

- https://dev.mysql.com/doc/refman/8.0/en/limit-optimization.html[MySQL Reference Manual] - LIMIT Query Optimization
- https://www.postgresql.org/docs/current/queries-limit.html[PostgreSQL: Documentation] - LIMIT and OFFSET

=== Articles & blog posts

- https://www.oreilly.com/library/view/high-performance-mysql/9780596101718/ch04.html[Query Performance Optimization]

0 comments on commit 970e9b3

Please sign in to comment.