diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4c12bac81..6bcb6f3af 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -39,9 +39,8 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
-# currently Windows does not work w/ code page related issues
# os: [ ubuntu-latest, windows-latest, macos-latest ]
- os: [ ubuntu-latest, macos-latest ]
+ os: [ ubuntu-latest, macos-latest ]
steps:
- uses: actions/checkout@main
with:
diff --git a/build.gradle b/build.gradle
index 15e9e50e2..a6460e801 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,6 +11,7 @@ buildscript {
plugins {
id 'java'
+ id "com.vanniktech.maven.publish" version "latest.release"
id 'maven-publish'
id 'signing'
@@ -62,16 +63,17 @@ def getVersion = { boolean considerSnapshot ->
snapshot = "-SNAPSHOT"
}
- return patch != null
- ? "${major}.${minor}.${patch}${snapshot}"
- : "${major}.${minor}${snapshot}"
+ return "${major}.${minor}" +
+ (patch != null ? ".${patch}" : "") +
+ (build != null ? ".${build}" : "") +
+ snapshot
}
// for publishing a release, call Gradle with Environment Variable RELEASE:
// RELEASE=true gradle JSQLParser:publish
version = getVersion( !System.getenv("RELEASE") )
-group = 'com.github.jsqlparser'
+group = 'com.manticore-projects.jsqlformatter'
description = 'JSQLParser library'
tasks.register('generateBuildInfo') {
@@ -148,19 +150,17 @@ dependencies {
testImplementation 'commons-io:commons-io:2.+'
testImplementation 'org.apache.commons:commons-text:+'
testImplementation 'org.mockito:mockito-core:+'
- testImplementation 'org.assertj:assertj-core:+'
+ testImplementation 'org.assertj:assertj-core:3.+'
testImplementation 'org.hamcrest:hamcrest-core:+'
testImplementation 'org.apache.commons:commons-lang3:+'
testImplementation 'com.h2database:h2:+'
-
- // for JaCoCo Reports
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4'
- testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.11.4'
-
- // https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter
testImplementation 'org.mockito:mockito-junit-jupiter:5.18.0'
+ testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.4'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4'
+
// Performance Benchmark
testImplementation 'org.openjdk.jmh:jmh-core:+'
testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:+'
@@ -178,11 +178,9 @@ dependencies {
javacc('org.javacc.generator:java:8.1.0-SNAPSHOT') { changing = true }
}
configurations.configureEach {
- resolutionStrategy.eachDependency { DependencyResolveDetails details ->
- if (details.requested.group in ['org.javacc:core', 'org.javacc.generator']) {
- // Check for updates every build
- resolutionStrategy.cacheChangingModulesFor 30, 'seconds'
- }
+ // Cache SNAPSHOT/changing modules for javacc for 30 seconds so updates are picked up quickly
+ resolutionStrategy {
+ cacheChangingModulesFor 30, 'seconds'
}
}
@@ -198,9 +196,6 @@ compileJavacc {
}
java {
- withSourcesJar()
- withJavadocJar()
-
sourceCompatibility = '11'
targetCompatibility = '11'
@@ -221,18 +216,18 @@ javadoc {
jar {
manifest {
attributes (
- "Automatic-Module-Name": "net.sf.jsqlparser"
+ "Automatic-Module-Name": "net.sf.jsqlparser"
)
}
bundle {
properties.empty()
bnd(
- "Created-By": System.properties.get('user.name'),
- "Bundle-SymbolicName": "net.sf.jsqlparser",
- "Import-Package": "*",
- "Export-Package": "net.sf.jsqlparser.*",
- "Automatic-Module-Name": "net.sf.jsqlparser"
+ "Created-By": System.properties.get('user.name'),
+ "Bundle-SymbolicName": "net.sf.jsqlparser",
+ "Import-Package": "*",
+ "Export-Package": "net.sf.jsqlparser.*",
+ "Automatic-Module-Name": "net.sf.jsqlparser"
)
}
@@ -343,7 +338,7 @@ jacocoTestCoverageVerification {
//@todo: temporarily increased to 7000, we need to bring that down to 5500 after accepting the Keywords PR
maximum = 20000
- }
+ }
excludes = [
'net.sf.jsqlparser.util.validation.*',
'net.sf.jsqlparser.**.*Adapter',
@@ -598,89 +593,56 @@ tasks.register('sphinx', Exec) {
}
}
-publish {
- dependsOn(check, gitChangelogTask, renderRR, xslt, xmldoc)
-}
+mavenPublishing {
+ publishToMavenCentral(true)
+ signAllPublications()
-publishing {
- publications {
- mavenJava(MavenPublication) {
- artifactId = 'jsqlparser'
+ coordinates(group, "jsqlparser", version)
- from components.java
+ pom {
+ name.set('JSQLParser library')
+ description.set('Parse SQL Statements into Abstract Syntax Trees (AST)')
+ url.set('https://github.com/JSQLParser/JSqlParser')
- versionMapping {
- usage('java-api') {
- fromResolutionOf('runtimeClasspath')
- }
- usage('java-runtime') {
- fromResolutionResult()
- }
+ licenses {
+ license {
+ name.set('GNU Library or Lesser General Public License (LGPL) V2.1')
+ url.set('http://www.gnu.org/licenses/lgpl-2.1.html')
}
-
- pom {
- name.set('JSQLParser library')
- description.set('Parse SQL Statements into Abstract Syntax Trees (AST)')
- url.set('https://github.com/JSQLParser/JSqlParser')
-
- licenses {
- license {
- name.set('GNU Library or Lesser General Public License (LGPL) V2.1')
- url.set('http://www.gnu.org/licenses/lgpl-2.1.html')
- }
- license {
- name.set('The Apache Software License, Version 2.0')
- url.set('http://www.apache.org/licenses/LICENSE-2.0.txt')
- }
- }
-
- developers {
- developer {
- id.set('twa')
- name.set('Tobias Warneke')
- email.set('t.warneke@gmx.net')
- }
- developer {
- id.set('are')
- name.set('Andreas Reichel')
- email.set('andreas@manticore-projects.com')
- }
- }
-
- scm {
- connection.set('scm:git:https://github.com/JSQLParser/JSqlParser.git')
- developerConnection.set('scm:git:ssh://git@github.com:JSQLParser/JSqlParser.git')
- url.set('https://github.com/JSQLParser/JSqlParser.git')
- }
+ license {
+ name.set('The Apache Software License, Version 2.0')
+ url.set('http://www.apache.org/licenses/LICENSE-2.0.txt')
}
}
- }
-
- repositories {
- maven {
- name = "ossrh"
- def releasesRepoUrl = "https://central.sonatype.com/repository/maven-releases"
- def snapshotsRepoUrl = "https://central.sonatype.com/repository/maven-snapshots/"
- url(version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl)
- credentials {
- username = providers.environmentVariable("ossrhUsername").orNull
- password = providers.environmentVariable("ossrhPassword").orNull
+ developers {
+ developer {
+ id.set('twa')
+ name.set('Tobias Warneke')
+ email.set('t.warneke@gmx.net')
+ }
+ developer {
+ id.set('are')
+ name.set('Andreas Reichel')
+ email.set('andreas@manticore-projects.com')
}
}
+
+ scm {
+ connection.set('scm:git:https://github.com/JSQLParser/JSqlParser.git')
+ developerConnection.set('scm:git:ssh://git@github.com:JSQLParser/JSqlParser.git')
+ url.set('https://github.com/JSQLParser/JSqlParser.git')
+ }
}
}
+// Fix signing task dependencies
+tasks.withType(AbstractPublishToMaven).configureEach {
+ dependsOn(tasks.withType(Sign))
+}
signing {
- //def signingKey = findProperty("signingKey")
- //def signingPassword = findProperty("signingPassword")
- //useInMemoryPgpKeys(signingKey, signingPassword)
-
- // don't sign SNAPSHOTS
- if (!version.endsWith('SNAPSHOT')) {
- sign publishing.publications.mavenJava
- }
+ required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("publish") }
}
tasks.withType(JavaCompile).configureEach {
@@ -732,4 +694,4 @@ jmh {
fork = 3
iterations = 5
timeOnIteration = '1s'
-}
+}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index a4b76b953..61285a659 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index cea7a793a..37f78a6af 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index f5feea6d6..adff685a0 100755
--- a/gradlew
+++ b/gradlew
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# Copyright © 2015-2021 the original authors.
+# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
-' "$PWD" ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -115,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
@@ -173,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
@@ -206,15 +203,14 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
diff --git a/gradlew.bat b/gradlew.bat
index 9d21a2183..c4bdd3ab8 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -70,11 +70,10 @@ goto fail
:execute
@rem Setup the command line
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/pom.xml b/pom.xml
index 20f6b7066..f676a9399 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,7 +99,7 @@
org.assertj
assertj-core
- 3.27.3
+ [3.27.7,)
test
@@ -276,7 +276,7 @@
org.javacc.plugin
javacc-maven-plugin
- 3.0.3
+ 3.8.0
javacc
@@ -285,14 +285,14 @@
jjtree-javacc
- UTF-8
- false
- false
- false
- java
-
-
-
+
+ -CODE_GENERATOR="Java"
+ -GRAMMAR_ENCODING="UTF-8"
+
+
+ -GRAMMAR_ENCODING="UTF-8"
+ -CODE_GENERATOR="Java"
+
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 000000000..6d75eea53
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'JSQLParser'
\ No newline at end of file
diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
index b598d38e1..532962695 100644
--- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
+++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
@@ -15,7 +15,6 @@ options {
DEBUG_LOOKAHEAD = false;
DEBUG_TOKEN_MANAGER = false;
CACHE_TOKENS = false;
- SINGLE_TREE_FILE = false;
// FORCE_LA_CHECK = true;
UNICODE_INPUT = true;
JAVA_TEMPLATE_TYPE = "modern";
diff --git a/src/test/java/net/sf/jsqlparser/statement/select/SpecialOracleTest.java b/src/test/java/net/sf/jsqlparser/statement/select/SpecialOracleTest.java
index 1c28f6aad..8fd5a9a6a 100644
--- a/src/test/java/net/sf/jsqlparser/statement/select/SpecialOracleTest.java
+++ b/src/test/java/net/sf/jsqlparser/statement/select/SpecialOracleTest.java
@@ -77,7 +77,8 @@ public class SpecialOracleTest {
"cast_multiset40.sql", "cast_multiset41.sql", "cast_multiset42.sql",
"cast_multiset43.sql", "columns01.sql", "condition01.sql", "condition02.sql",
"condition03.sql", "condition04.sql", "condition05.sql", "condition07.sql",
- "condition08.sql", "condition09.sql", "condition10.sql", "condition12.sql",
+ "condition08.sql", "condition09.sql", "condition10.sql", "condition11.sql",
+ "condition12.sql",
"condition14.sql", "condition15.sql", "condition19.sql", "condition20.sql",
"connect_by01.sql", "connect_by02.sql", "connect_by03.sql", "connect_by04.sql",
"connect_by05.sql", "connect_by06.sql", "connect_by07.sql", "connect_by08.sql",
diff --git a/src/test/resources/net/sf/jsqlparser/statement/select/oracle-tests/condition11.sql b/src/test/resources/net/sf/jsqlparser/statement/select/oracle-tests/condition11.sql
index 2b4866121..499d05c6e 100644
--- a/src/test/resources/net/sf/jsqlparser/statement/select/oracle-tests/condition11.sql
+++ b/src/test/resources/net/sf/jsqlparser/statement/select/oracle-tests/condition11.sql
@@ -17,4 +17,5 @@ and 0 = Lib.SKU(X.sid, nvl(Z.cid, '^'))
--@FAILURE: Encountered unexpected token: "(" "(" recorded first on Aug 3, 2021, 7:20:08 AM
--@FAILURE: Encountered: "(" / "(", at line 14, column 26, in lexical state DEFAULT. recorded first on 15 May 2025, 16:24:08
---@FAILURE: Encountered: / "(", at line 14, column 26, in lexical state DEFAULT. recorded first on 9 Jul 2025, 17:09:17
\ No newline at end of file
+--@FAILURE: Encountered: / "(", at line 14, column 26, in lexical state DEFAULT. recorded first on 9 Jul 2025, 17:09:17
+--@SUCCESSFULLY_PARSED_AND_DEPARSED first on 25 Feb 2026, 00:22:20
\ No newline at end of file