{"id":17203961,"url":"https://github.com/ivanceras/keywordsql","last_synced_at":"2025-03-25T09:42:38.151Z","repository":{"id":24282676,"uuid":"27677409","full_name":"ivanceras/keywordSQL","owner":"ivanceras","description":"All the SQL keywords in Java","archived":false,"fork":false,"pushed_at":"2015-01-14T08:23:12.000Z","size":476,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-23T01:33:05.896Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivanceras.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-12-07T17:04:47.000Z","updated_at":"2015-08-26T22:36:59.000Z","dependencies_parsed_at":"2022-08-22T13:10:12.882Z","dependency_job_id":null,"html_url":"https://github.com/ivanceras/keywordSQL","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanceras%2FkeywordSQL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanceras%2FkeywordSQL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanceras%2FkeywordSQL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanceras%2FkeywordSQL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivanceras","download_url":"https://codeload.github.com/ivanceras/keywordSQL/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245437131,"owners_count":20615214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T02:20:00.321Z","updated_at":"2025-03-25T09:42:38.129Z","avatar_url":"https://github.com/ivanceras.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"keywordSQL\n==========\n\n[![Build Status](https://api.travis-ci.org/ivanceras/keywordSQL.svg)](https://travis-ci.org/ivanceras/keywordSQL)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.ivanceras/keywordSQL/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.ivanceras/keywordSQL)\n\nI list down all the keywords of Major Database vendors and [convert](https://github.com/ivanceras/keywordSQL/blob/master/src/main/java/com/ivanceras/keyword/sql/generator/KeywordGenerator.java) them into methods in a class.\nNow you can call these methods as though you are writing a series of texts in a Stringbuilder.\n\n\n##How much complexity of SQL statements I can write?\n* As complex as you want it to get.\n\nExample: List down products that is sold by somebody that is within 5 k.m from me.\n\n```java\n\n\n//import static com.ivanceras.keyword.sql.KeywordsStatics.*;\n//import static com.ivanceras.keyword.sql.SQLStatics.*;\n\n\n\t@Test\n\tpublic void test1(){\n\t\tdouble myLatitude = 10.0000d;\n\t\tdouble myLongitude = 123.000d;\n\t\tdouble km = 5.0d;\n\t\tdouble earthRadius = 6371.0d;\n\n\t\tSQL sql = WITH(\"distanceSQL\", SELECT()\n\t\t\t\t.ACOS(\n\t\t\t\t\t\tSIN(RADIANS(VALUE( myLatitude )))\n\t\t\t\t\t\t.MULTIPLY() .SIN(RADIANS(FIELD( \"latitude\" )))\n\t\t\t\t\t\t.PLUS() .COS(RADIANS(VALUE( myLatitude )))\n\t\t\t\t\t\t.MULTIPLY() .COS(RADIANS(FIELD( \"latitude\" )))\n\t\t\t\t\t\t.MULTIPLY() .COS(RADIANS(FIELD( \"longitude\" ))\n\t\t\t\t\t\t\t\t.MINUS() .RADIANS(VALUE( myLongitude )))\n\t\t\t\t\t\t).MULTIPLY() .VALUE(earthRadius)\n\t\t\t\t\t\t.AS(\"computed_distance\")\n\t\t\t\t\t\t.FIELD(\"address.address_id\")\n\t\t\t\t\t\t.FROM(\"address\")\n\n\t\t\t\t\t\t,\"withinKm\", SELECT(\"computed_distance\", \"address_id\")\n\t\t\t\t\t\t.FROM(\"distanceSQL\")\n\t\t\t\t\t\t.WHERE(\"computed_distance\").LESS_THAN(km)\n\t\t\t\t)\n\t\t\t\t.SELECT(\"*\")\n\t\t\t\t.FIELD(\"computed_distance\")\n\t\t\t\t.FROM(\"distanceSQL\") \n\t\t\t\t.INNER_JOIN(\"user_info\")\n\t\t\t\t.ON(\"distanceSQL.address_id\", \"user_info.address_id\")\n\t\t\t\t.INNER_JOIN(\"users\")\n\t\t\t\t.ON(\"user_info.user_id\", \"users.user_id\")\n\t\t\t\t.INNER_JOIN(\"product\")\n\t\t\t\t.ON(\"users.user_id\", \"product.owner_id\");\n\n\t\tBreakdown bk  = sql.build();\n\t\tSystem.out.println(\"SQL: \"+bk.getSql());\n\t\tSystem.out.println(\"\\nparameters: \"+Arrays.asList(bk.getParameters()));\n\t}\n```\nThe output\n\n```sql\n\nSQL:\nWITH distanceSQL AS ( \n\tSELECT ACOS ( SIN ( RADIANS ( ? ) ) \n\t * SIN ( RADIANS ( latitude ) ) \n\t + COS ( RADIANS ( ? ) ) \n\t * COS ( RADIANS ( latitude ) ) \n\t * COS ( RADIANS ( longitude ) \n\t - RADIANS ( ? ) ) ) \n\t * ? AS computed_distance , address.address_id \n\t FROM address \n  ) \n,withinKm AS \n ( \n SELECT computed_distance , address_id \n \tFROM distanceSQL WHERE computed_distance \u003c ? \n ) \n SELECT * , computed_distance \n FROM distanceSQL \n INNER JOIN user_info \n \tON distanceSQL.address_id = user_info.address_id \n INNER JOIN users \n \tON user_info.user_id = users.user_id \n INNER JOIN product \n \tON users.user_id = product.owner_id \n\nparameters: [10.0, 10.0, 123.0, 6371.0, 5.0]\n\n```\n\n\n##Advantages\n* No SQL typo anymore, since IDE checks it for you.\n* SQL injection resistance while writing the values as it where supposed to be.\n\n\n\n##Supported SQL keywords\n\n* postgresql\n* sqlite\n* oracle\n* mysql\n* mariadb\n\n##Roadmap\n\n* thorough support for functions\n* Make a lightweight version of Table/Column generators from ivanceras ORM, this way all text will be check by the IDE\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivanceras%2Fkeywordsql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivanceras%2Fkeywordsql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivanceras%2Fkeywordsql/lists"}