## install java jdk. find downloads page and get latest tarball. https://www.oracle.com/java/technologies/downloads/ ``` wget https://download.oracle.com/java/19/latest/jdk-19_linux-x64_bin.tar.gz tar -xvf downloaded_file ``` move the extracted folder to /opt put the extracted location in your path variable ``` export JAVA_HOME=/opt/jdk-19.0.1 export PATH=$PATH:$JAVA_HOME/bin ``` `java --version` to test ## install gradle (optional) Gradle wrapper (`gradlew`) is included in the repo, so manual Gradle installation is not required. If you prefer to install Gradle system-wide: ``` wget https://services.gradle.org/distributions/gradle-8.5-bin.zip unzip -d /opt/gradle gradle-8.5-bin.zip export PATH=$PATH:/opt/gradle/gradle-8.5/bin gradle -v ``` ## clone this repo ``` git clone https://gitea.hptrow.me/pt/jrunner.git cd jrunner ``` ## build ``` ./gradlew build ``` ## deploy ### using the deploy script (recommended) Run the interactive deploy script: ``` ./deploy.sh ``` The script will prompt you to choose: 1. **Local install** - Fast, no sudo required, installs to `./jrunner/build/install/jrunner` 2. **Global install** - Installs to `/opt/jrunner` with symlink at `/usr/local/bin/jrunner` 3. **Custom directory** - Prompts for path with tab-completion support The script builds, extracts to a temporary location, and only updates the target directory after the build succeeds. This ensures your existing deployment stays intact if the build fails. ### manual deployment ``` ./gradlew build sudo unzip jrunner/build/distributions/jrunner.zip -d /opt/ sudo ln -sf /opt/jrunner/bin/jrunner /usr/local/bin/jrunner ``` Or for local testing: ``` ./gradlew installDist # Binary at: ./jrunner/build/install/jrunner/bin/jrunner ``` ## usage ### Query Mode (new in v1.1) Query mode outputs results to stdout for piping to visidata, pspg, or less. It activates automatically when destination flags are omitted. **Basic query to CSV:** ```bash jrunner -scu "jdbc:as400://hostname" -scn user -scp pass -sq query.sql ``` **Pipe to visidata:** ```bash jrunner -scu "jdbc:as400://hostname" -scn user -scp pass -sq query.sql | visidata -f csv ``` **TSV format:** ```bash jrunner -scu "jdbc:as400://hostname" -scn user -scp pass -sq query.sql -f tsv ``` **SQL Server example:** ```bash jrunner -scu "jdbc:sqlserver://hostname:1433;databaseName=mydb" -scn user -scp pass -sq query.sql ``` **PostgreSQL example:** ```bash jrunner -scu "jdbc:postgresql://hostname:5432/dbname" -scn user -scp pass -sq query.sql ``` ### Migration Mode Full migration mode with both source and destination: ```bash jrunner -scu jdbc:postgresql://source:5432/sourcedb \ -scn sourceuser \ -scp sourcepass \ -dcu jdbc:postgresql://dest:5432/destdb \ -dcn destuser \ -dcp destpass \ -sq query.sql \ -dt public.target_table ``` ### Command-line flags **Source connection:** - `-scu` - source JDBC URL - `-scn` - source username - `-scp` - source password - `-sq` - path to source SQL query file **Destination connection (migration mode only):** - `-dcu` - destination JDBC URL - `-dcn` - destination username - `-dcp` - destination password - `-dt` - fully qualified destination table name **Options:** - `-t` - trim text fields (default: true) - `-c` - clear target table before insert (default: true) - `-f` - output format: csv, tsv (query mode only, default: csv)