{"id":1601,"date":"2013-09-30T01:50:18","date_gmt":"2013-09-30T06:50:18","guid":{"rendered":"http:\/\/www.dpriver.com\/blog\/?page_id=1601"},"modified":"2013-09-30T02:09:28","modified_gmt":"2013-09-30T07:09:28","slug":"remove-duplicated-parenthesis-in-sql-statement","status":"publish","type":"page","link":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/","title":{"rendered":"Remove duplicated parenthesis in SQL statement"},"content":{"rendered":"<p>General SQL Parser can be use to remove duplicated parenthesis in SQL statement. After parsing sql query, all detailed parse tree information was available for further processing.<\/p>\n<p>Take this sql for example:<\/p>\n<pre>\r\nselect * from ((select f from t1) union ((select f from t2)))\r\n<\/pre>\n<p>you can easily remove duplicated parenthesis in this subquery<\/p>\n<pre>\r\n((select f from t2))\r\n<\/pre>\n<p>with code like this:<\/p>\n<pre>\r\n    private static int removeDuplicatedParenthesis(TSourceTokenList sourceTokenList){\r\n        int cnt = 0;\r\n        TSourceToken st = null, prevEndToken = null;\r\n        boolean inParenthesis = false;\r\n        for(int i=0;i&lt;sourceTokenList.size();i++){\r\n            st = sourceTokenList.get(i);\r\n            if (st.isnonsolidtoken()) continue;\r\n            if ((st.tokencode == '(')&&(st.getLinkToken() != null)){\r\n               if (inParenthesis){\r\n                  if (st.getLinkToken() == prevEndToken.prevSolidToken()){\r\n                      \/\/this is duplicated token, remove this token\r\n                      st.setString(\"\");\r\n                      st.getLinkToken().setString(\"\");\r\n                      cnt++;\r\n                  }\r\n                  prevEndToken = st.getLinkToken();\r\n               }else {\r\n                   inParenthesis = true;\r\n                   prevEndToken = st.getLinkToken();\r\n               }\r\n            }else {\r\n                inParenthesis = false;\r\n                prevEndToken = null;\r\n            }\r\n        }\r\n        return cnt;\r\n    }\r\n\r\n<\/pre>\n<p>and the result sql will be like this:<\/p>\n<pre>\r\nselect * from ((select f from t1) union (select f from t2))\r\n<\/pre>\n<p>For predicate in where clause, the same rule applied.<\/p>\n<pre>\r\nselect * from user_table where ((username like '%admin%'));\r\n<\/pre>\n<p>will be turned into this one:<\/p>\n<pre>\r\nselect * from user_table where (username like '%admin%');\r\n<\/pre>\n<p>For SQL like this:<\/p>\n<pre>\r\nselect * from user_table where (f1 > 1 or f2 > 2) and f3 > 3;\r\n<\/pre>\n<p>this tool will not remove parenthesis which will change semantic of the original sql.<\/p>\n<p>Download this demo, <a href=\"http:\/\/www.dpriver.com\/gsp\/demos\/java\/sqlrefactor\/rmdupParenthesis.java\">Java version<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>General SQL Parser can be use to remove duplicated parenthesis in SQL statement. After parsing sql query, all detailed parse tree information was available for further processing. Take this sql for example: select * from ((select f from t1) union ((select f from t2))) you can easily remove duplicated parenthesis in this subquery ((select f from t2)) with code like this: private static int removeDuplicatedParenthesis(TSourceTokenList sourceTokenList){ int cnt = 0; TSourceToken st = null, prevEndToken = null; boolean inParenthesis = false; for(int i=0;i&lt;sourceTokenList.size();i++){ st = sourceTokenList.get(i); if (st.isnonsolidtoken()) continue; if ((st.tokencode == &#8216;(&#8216;)&#038;&#038;(st.getLinkToken() != null)){ if (inParenthesis){ if (st.getLinkToken() ==\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":235,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"gsp_feature_page_tt.php","meta":[],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":5}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>refactor sql by removing duplicated parenthesis in sql query<\/title>\n<meta name=\"description\" content=\"Remove duplicated parenthesis in SQL statement\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"refactor sql by removing duplicated parenthesis in sql query\" \/>\n<meta property=\"og:description\" content=\"Remove duplicated parenthesis in SQL statement\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/\" \/>\n<meta property=\"og:site_name\" content=\"SQL and Data Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2013-09-30T07:09:28+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\",\"name\":\"SQL and Data Blog\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"contentUrl\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"width\":251,\"height\":72,\"caption\":\"SQL and Data Blog\"},\"image\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"name\":\"SQL and Data Blog\",\"description\":\"SQL related blog for database professional\",\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/\",\"name\":\"refactor sql by removing duplicated parenthesis in sql query\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\"},\"datePublished\":\"2013-09-30T06:50:18+00:00\",\"dateModified\":\"2013-09-30T07:09:28+00:00\",\"description\":\"Remove duplicated parenthesis in SQL statement\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dpriver.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"List of demos illustrate how to use general sql parser\",\"item\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Remove duplicated parenthesis in SQL statement\"}]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"refactor sql by removing duplicated parenthesis in sql query","description":"Remove duplicated parenthesis in SQL statement","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/","og_locale":"en_US","og_type":"article","og_title":"refactor sql by removing duplicated parenthesis in sql query","og_description":"Remove duplicated parenthesis in SQL statement","og_url":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/","og_site_name":"SQL and Data Blog","article_modified_time":"2013-09-30T07:09:28+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.dpriver.com\/blog\/#organization","name":"SQL and Data Blog","url":"https:\/\/www.dpriver.com\/blog\/","sameAs":[],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","contentUrl":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","width":251,"height":72,"caption":"SQL and Data Blog"},"image":{"@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.dpriver.com\/blog\/#website","url":"https:\/\/www.dpriver.com\/blog\/","name":"SQL and Data Blog","description":"SQL related blog for database professional","publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/","url":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/","name":"refactor sql by removing duplicated parenthesis in sql query","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/#website"},"datePublished":"2013-09-30T06:50:18+00:00","dateModified":"2013-09-30T07:09:28+00:00","description":"Remove duplicated parenthesis in SQL statement","breadcrumb":{"@id":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/remove-duplicated-parenthesis-in-sql-statement\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dpriver.com\/blog\/"},{"@type":"ListItem","position":2,"name":"List of demos illustrate how to use general sql parser","item":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/"},{"@type":"ListItem","position":3,"name":"Remove duplicated parenthesis in SQL statement"}]}]}},"_links":{"self":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages\/1601"}],"collection":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/comments?post=1601"}],"version-history":[{"count":9,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages\/1601\/revisions"}],"predecessor-version":[{"id":1603,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages\/1601\/revisions\/1603"}],"up":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages\/235"}],"wp:attachment":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/media?parent=1601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}