Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
4aec7f6
Intial commit for phase 4: Dashboards
cgivre Feb 6, 2026
3ed012d
More Phase 4 work
cgivre Feb 6, 2026
7766210
Dashboard Improvements
cgivre Feb 6, 2026
5fe6ad1
Fix RAT
cgivre Feb 6, 2026
7030c1d
Add Image Upload to Dashboard
cgivre Feb 6, 2026
4997720
Image upload working
cgivre Feb 6, 2026
5759e59
Added Frontend Unit tests
cgivre Feb 6, 2026
6a69210
Unit test fix
cgivre Feb 6, 2026
d56871d
Fix CodeQL issues
cgivre Feb 8, 2026
e6ce08e
Fix CodeQL issues
cgivre Feb 8, 2026
e248c36
Try again...
cgivre Feb 8, 2026
3e8c653
More CodeQL Fixes
cgivre Feb 8, 2026
5dd6c97
More code fixes
cgivre Feb 8, 2026
c76d149
Fix build error
cgivre Feb 8, 2026
b08ae99
Various fixes
cgivre Feb 9, 2026
32c7cda
XML Nav Tree Improvements
cgivre Feb 9, 2026
94bdefa
Nav Tree working
cgivre Feb 9, 2026
b57a43c
Add big number
cgivre Feb 9, 2026
c38376e
Finished File System Config
cgivre Feb 11, 2026
4128d76
Fix Linting
cgivre Feb 11, 2026
67497f6
Fix useEffect dependency order in ProspectorSettingsModal
cgivre Feb 11, 2026
ee28750
Improve workspace tab UI with instructions, validation, and security
cgivre Feb 11, 2026
57eb255
Fix Add Workspace button and handle classpath plugin special case
cgivre Feb 11, 2026
9b9f864
Hide workspace tab for classpath plugin
cgivre Feb 11, 2026
1446c7e
Fix Add Workspace button with proper useCallback dependencies
cgivre Feb 11, 2026
9bc1f7b
Stabilize workspace handlers and table columns with useCallback and u…
cgivre Feb 11, 2026
540c590
Fix Add Workspace button state persistence issue
cgivre Feb 11, 2026
48b639a
Add validation for duplicate workspace names
cgivre Feb 11, 2026
0e1be3c
Fix workspace initialization on first mount
cgivre Feb 11, 2026
d8aee37
More improvements
cgivre Feb 12, 2026
51c9dff
Implement column menus for ResultsGrid with comprehensive feature set
cgivre Feb 12, 2026
f5e79a5
Various improvements
cgivre Feb 12, 2026
50625a5
Dark mode:
cgivre Feb 12, 2026
960ac71
Minor bug fix
cgivre Feb 12, 2026
cb65f03
Fix state
cgivre Feb 13, 2026
5e5a712
Fix Vault Unit Tests
cgivre Feb 13, 2026
8b014dc
Fix Docker based unit tests
cgivre Feb 13, 2026
53e76cd
Visualization improvements
cgivre Feb 13, 2026
3fa4b63
Link fix
cgivre Feb 13, 2026
a34e719
Various fixes
cgivre Feb 18, 2026
e001547
Fixing time grain issues
cgivre Feb 18, 2026
d1d4a39
WIP Time Grain
cgivre Feb 18, 2026
31757a4
Time grain working
cgivre Feb 18, 2026
24b7774
Filter improvements and hardening.
cgivre Feb 19, 2026
94e54a3
Refactor SQL generator to use Java port of SQL Glot
cgivre Feb 23, 2026
e77fc4d
Fix checkstyles
cgivre Feb 23, 2026
01ad4ad
Add trendlines
cgivre Feb 25, 2026
7f5b5cf
Profile page improvements
cgivre Feb 26, 2026
64c905c
Implement Profile Detail Page — Dashboard-style redesign with AI advisor
cgivre Feb 26, 2026
c12990e
Improve Profile Detail Page layout: add query display and evenly-spac…
cgivre Feb 26, 2026
c4d5b06
Fix AI advisor context serialization error
cgivre Feb 26, 2026
1cde275
Add credential redaction to prevent sensitive data exposure to AI
cgivre Feb 26, 2026
736f4d9
Improve CSRF token handling for hosted deployments
cgivre Feb 26, 2026
dc90781
Revert "Improve CSRF token handling for hosted deployments"
cgivre Feb 26, 2026
52f3314
Added new visualizations
cgivre Mar 2, 2026
2acdbe5
Fix streaming UI bug
cgivre Mar 2, 2026
6d3870d
WIP
cgivre Mar 6, 2026
8e69dad
Size improvements
cgivre Mar 6, 2026
214030d
UI Improvements
cgivre Mar 8, 2026
c31528e
More data sources
cgivre Mar 9, 2026
b336aeb
More data sources
cgivre Mar 9, 2026
75d6951
Schema tree fixes
cgivre Mar 9, 2026
05d388d
Fix Metrics and Profiles Pages
cgivre Mar 10, 2026
95d0964
Schema tree fixes
cgivre Mar 11, 2026
42aad6f
Updated gitignore
cgivre Mar 11, 2026
fd44e98
Fix CodeQL issues
cgivre Mar 11, 2026
57fe76a
Add backend result cache service with security hardening
cgivre Mar 12, 2026
9051c90
Add frontend memory optimization with LRU cache and backend integration
cgivre Mar 12, 2026
9eea28c
Add server-side pagination for large result sets
cgivre Mar 12, 2026
5068230
Remove unused act import from useServerPagination test
cgivre Mar 12, 2026
2959473
Fix CodeQL
cgivre Mar 12, 2026
0ee901e
Fix build errors
cgivre Mar 12, 2026
e27bc41
PDF Fix
cgivre Mar 12, 2026
df7f488
Various updates
cgivre Mar 12, 2026
fef7349
Added sys project
cgivre Mar 12, 2026
ead86e5
Fix unit tests
cgivre Mar 13, 2026
7bac7fb
Fix CodeQL issues
cgivre Mar 13, 2026
d467065
Various AI improvements
cgivre Mar 16, 2026
a13b0e7
Various fixes
cgivre Mar 17, 2026
789bd09
Project refinements
cgivre Mar 18, 2026
84ad268
Fix Checkstyle
cgivre Mar 18, 2026
1bdba06
Fix schema search
cgivre Mar 18, 2026
505e92b
Fix query tab
cgivre Mar 18, 2026
fdc03f3
Scheduler in progress
cgivre Mar 19, 2026
405551a
Scheduler improvements
cgivre Mar 20, 2026
1f1c331
Various fixes
cgivre Mar 22, 2026
b77cf39
Improve SqlLab layout and AI suggestions
cgivre Mar 23, 2026
0e008db
Fix: Add backtick escaping to INFORMATION_SCHEMA.COLUMNS query
cgivre Mar 24, 2026
67ec29c
Fix: Add missing backticks to INFORMATION_SCHEMA.COLUMNS and simplify…
cgivre Mar 24, 2026
f37dc7b
Fix: Extract fetchColumnsForTable private helper to fix getSchemaTree
cgivre Mar 24, 2026
4fc3f43
Fix: Use fresh WebUserConnection for each metadata query
cgivre Mar 24, 2026
9974d11
Fix: Correct WebUserConnection constructor call
cgivre Mar 24, 2026
25aec58
Refactor: Add boolean parameter to executeQuery for connection reuse …
cgivre Mar 24, 2026
2537d7c
Improve AI Query Suggestions: format, name tabs, remove panel expansion
cgivre Mar 24, 2026
6ff5bd7
Fix: Remove unused Space import from QuerySuggestions
cgivre Mar 24, 2026
8599e6c
Fix: Change allValidTables from let to const
cgivre Mar 24, 2026
2c48efe
Fix: Pass suggestion title to parent component in AiAssistantModal
cgivre Mar 24, 2026
cf5a302
Implement hierarchical geographic map support with lazy-loading
cgivre Mar 24, 2026
a67535b
Update TODO: mark Choropleth Maps as complete
cgivre Mar 24, 2026
8251c23
Fix project data loading: load saved queries and improve cache handling
cgivre Mar 24, 2026
ae1f376
Add US ZIP Code geographic map support
cgivre Mar 24, 2026
f7fabfe
Clean up: remove Python download scripts, fix linting
cgivre Mar 24, 2026
a5d7d4b
Fix: replace dynamic import with static import in SqlLabPage
cgivre Mar 24, 2026
3a0690c
Remove broken us-zipcodes placeholder
cgivre Mar 24, 2026
d80d150
Add US ZIP Code support with DC data + full US instructions
cgivre Mar 24, 2026
701155a
Add .gitignore for large GeoJSON files + setup script
cgivre Mar 24, 2026
a80572b
Add debugging logs for choropleth map rendering and GeoJSON loading
cgivre Mar 24, 2026
ea76466
Add state-level ZIP code support to GeoMapRegistry and create Python …
cgivre Mar 24, 2026
715c87a
Add multi-select UI for state-level ZIP code scopes
cgivre Mar 24, 2026
3dc199b
Fix: Include 'US ZIP Codes (by State)' group in GEO_SCOPE_OPTIONS
cgivre Mar 24, 2026
8d0fc15
Add merged US ZIP codes GeoJSON (4,388 ZIP codes from 14 states)
cgivre Mar 25, 2026
6e51eed
Improve ZIP code download: minification + 5-minute timeout
cgivre Mar 25, 2026
f4324f2
Add polygon simplification to reduce file sizes by 67%
cgivre Mar 25, 2026
667e2c4
Optimize ZIP code performance: use state-specific files instead of me…
cgivre Mar 25, 2026
0e489cc
Replace NaN with 0 in choropleth visualization data
cgivre Mar 25, 2026
69081e5
Convert us-zipcodes from GeoJSON to TopoJSON for 76% size reduction
cgivre Mar 25, 2026
e33d9c6
Add @types/topojson-client for TypeScript support
cgivre Mar 25, 2026
ba5fe8b
Fix ESLint errors: remove self-assignments and any type annotation
cgivre Mar 25, 2026
c31c398
Add Apache License headers to scripts and data files
cgivre Mar 25, 2026
9bfa2c0
Implement choropleth zoom and center configuration
cgivre Mar 25, 2026
6e0703e
Allow capturing choropleth map view from interactive preview
cgivre Mar 25, 2026
9c66669
Add 'Manage Data Sources' to admin menu
cgivre Mar 25, 2026
1bf315f
Fix ref type annotations in map capture feature
cgivre Mar 25, 2026
044dd16
Fix route parameter collision between project and dashboard IDs
cgivre Mar 25, 2026
e585c10
Fix: prevent first saved query from loading into new tabs
cgivre Mar 25, 2026
226aa02
Fix: preserve lock state and visualization IDs when duplicating tabs
cgivre Mar 25, 2026
71870c1
Initialize lock and viz fields for new tabs
cgivre Mar 25, 2026
5e2cb1a
Add sort direction controls to metric and categorical visualizations
cgivre Mar 25, 2026
7ee4fdd
Add number formatting, labels, and sparkline data limiting to metric …
cgivre Mar 25, 2026
87ce533
Add currency formatting and consolidate metric visualization options …
cgivre Mar 25, 2026
2eebe97
Move Sort Direction control to appear right after Order By for bigNumber
cgivre Mar 25, 2026
e3c25dd
Fix AI Q&A panel data access across dashboard tabs
cgivre Mar 25, 2026
ebc184d
Include SQL queries in AI Q&A dashboard context
cgivre Mar 25, 2026
bbc71f8
Instruct AI to keep dashboard Q&A responses brief
cgivre Mar 25, 2026
2bbc519
Make AI Q&A instruction explicit: use only dashboard data, no databas…
cgivre Mar 25, 2026
2efc8a3
Fix AI Q&A to use only dashboard data, add clear button
cgivre Mar 25, 2026
e0d81a4
Fix JDBC Config
cgivre Apr 6, 2026
bcac797
Fix license
cgivre Apr 6, 2026
28e9a3c
Various fixes
cgivre Apr 10, 2026
5ed8041
Enforce per-user authorization on schedule endpoints
cgivre Apr 24, 2026
c0f3e7b
Various fixes
cgivre May 1, 2026
9e70a8a
Fix linting
cgivre May 1, 2026
de0b8c7
Fix CommandPalette test for Spotlight rebuild
cgivre May 1, 2026
c278e30
More Apple Design
cgivre May 5, 2026
89302b5
Add Format SQL, Add-to-dashboard, column-dep badge
cgivre May 5, 2026
312da4e
Move schema browser to a dedicated left rail
cgivre May 6, 2026
6b0ce49
Double-click table opens a new SQL tab
cgivre May 6, 2026
e377d79
More progress
cgivre May 18, 2026
337e8ce
Additional Updates
cgivre Jun 10, 2026
bc4e985
Remove stale code
cgivre Jun 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
64 changes: 64 additions & 0 deletions .github/workflows/sqllab-frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

name: SQL Lab Frontend CI

on:
push:
paths:
- 'exec/java-exec/src/main/resources/webapp/**'
pull_request:
paths:
- 'exec/java-exec/src/main/resources/webapp/**'

defaults:
run:
working-directory: exec/java-exec/src/main/resources/webapp

jobs:
build-and-test:
name: Build & Test
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20]
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: exec/java-exec/src/main/resources/webapp/package-lock.json

- name: Install dependencies
run: npm ci

- name: TypeScript type check
run: npx tsc --noEmit

- name: Lint
run: npm run lint

- name: Run tests
run: npx vitest run --passWithNoTests

- name: Build
run: npm run build
29 changes: 28 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,31 @@ target/
tools/venv/
venv/
.vscode/*
exec/java-exec/src/main/resources/webapp/
/exec/java-exec/src/main/resources/python/.venv/
__pycache__/
*.pyc
.pytest_cache/
.coverage

# Frontend (webapp)
node_modules/
.vite/
.env
.env.local
.env.*.local
*.swo
Thumbs.db
coverage/
/exec/java-exec/src/main/resources/webapp/dist/
/exec/java-exec/src/main/resources/webapp/node/
result-cache/

# Large GeoJSON files (for local development only, not committed to git)
# Exception: us-zipcodes.topojson (merged all-states, 91 MB) is committed to git
# Individual state files (us-al-zipcodes.json, us-ca-zipcodes.json, etc.) are git-ignored
# These can be regenerated locally using scripts/process-zipcodes.py
/exec/java-exec/src/main/resources/webapp/public/geojson/us-*-zipcodes.json
/exec/java-exec/src/main/resources/webapp/public/geojson/us-zipcodes.json
!/exec/java-exec/src/main/resources/webapp/public/geojson/us-zipcodes.topojson
/exec/java-exec/src/main/resources/webapp/public/geojson/*.zip
/exec/java-exec/src/main/resources/webapp/public/geojson/cb_*
67 changes: 67 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Apache Drill — Claude / AI assistant guide

Apache Drill is a schema-free SQL query engine for Hadoop, NoSQL, and cloud storage. This file is the entry point for AI coding assistants working in this repo: it points you to where the docs live, calls out hard constraints, and lists must-run commands.

## Where the docs live

All developer documentation is under [`docs/dev/`](docs/dev/). Start with [`docs/dev/DevDocs.md`](docs/dev/DevDocs.md) for the broader index.

| Topic | Doc |
|---|---|
| **Web UI (React SPA)** — architecture, routing, sidebar, contexts, page-by-page reference | [`docs/dev/ui/README.md`](docs/dev/ui/README.md) |
| **Login / authentication refactor** — design notes, current auth model, options | [`docs/dev/LoginRefactor.md`](docs/dev/LoginRefactor.md) |
| Prospector AI assistant — backend | [`docs/dev/PROSPECTOR.md`](docs/dev/PROSPECTOR.md) |
| SQL transpiler (GraalPy + sqlglot) | [`docs/dev/TRANSPILER.md`](docs/dev/TRANSPILER.md) |
| AI features overview | [`docs/dev/AI_FEATURES.md`](docs/dev/AI_FEATURES.md) |
| Dev environment setup | [`docs/dev/Environment.md`](docs/dev/Environment.md) |
| Testing | [`docs/dev/Testing.md`](docs/dev/Testing.md) |
| Maven build | [`docs/dev/Maven.md`](docs/dev/Maven.md) |
| Jetty 12 migration notes | [`docs/dev/Jetty12Migration.md`](docs/dev/Jetty12Migration.md) |
| License headers | [`docs/dev/LicenseHeadersAndNotices.md`](docs/dev/LicenseHeadersAndNotices.md) |

If you write new documentation, place it in [`docs/dev/`](docs/dev/), not in source directories. Update this table and the relevant index file.

## Hard constraints

These are easy to get wrong and break the build.

### Checkstyle

After modifying anything in `exec/java-exec`, run:

```bash
mvn checkstyle:check -pl exec/java-exec
```

Common failures: `if` statements without braces, unused imports, missing Apache license headers on new files.

### `jdbc-all` jar size limit

The shaded JDBC driver (`exec/jdbc-all`) has a size limit enforced by `maven-enforcer-plugin` (~62 MB).

If you add large resources to `exec/java-exec` (anything in `src/main/resources/webapp/`, large fonts, model files, etc.), update the exclusion filters in [`exec/jdbc-all/pom.xml`](exec/jdbc-all/pom.xml) under the `maven-shade-plugin` configuration. The `webapp/**` filter is already present.

### License headers

Every source file (Java, TypeScript, TSX, JavaScript, CSS, HTML) must have an Apache 2.0 license header. See [`docs/dev/LicenseHeadersAndNotices.md`](docs/dev/LicenseHeadersAndNotices.md).

## UI workflow

The web UI is a React SPA at `exec/java-exec/src/main/resources/webapp/`. Build, dev server, conventions, and per-page reference are all in [`docs/dev/ui/`](docs/dev/ui/README.md).

Quick reference:

```bash
# Production build (run from repo root via Maven, or directly):
cd exec/java-exec/src/main/resources/webapp && npm install && npm run build

# Dev server (with HMR; proxies API calls to a running Drillbit on :8047):
cd exec/java-exec/src/main/resources/webapp && npm run dev
```

When adding or substantially modifying a UI page, update its doc under [`docs/dev/ui/pages/`](docs/dev/ui/pages/) in the same PR. See [`docs/dev/ui/README.md`](docs/dev/ui/README.md) for conventions.

## Git conventions

- Do **not** add Claude as a co-author on commits.
- Commits should be descriptive in the imperative ("Add cluster page", not "Added cluster page").
92 changes: 92 additions & 0 deletions LINTER_RESULTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Code Quality & Linter Results
**Date**: 2026-04-06
**Branch**: feature/sqllab-react-ui

## Frontend (React/TypeScript) - `/src/main/resources/webapp`

### ✅ ESLint
```
npm run lint
```
**Status**: ✅ PASSED (0 warnings, 0 errors)
- Configuration: ESLint 8.56.0 with TypeScript support
- Plugins: @typescript-eslint, react-hooks
- Settings: max-warnings=0 (strict mode)
- Extensions checked: ts, tsx

### ✅ TypeScript Type Checking
```
npx tsc --noEmit
```
**Status**: ✅ PASSED (0 errors)
- Version: 5.3.3
- All source files in `src/` directory compile without type errors
- Strict mode enabled

### ✅ Production Build
```
npm run build
```
**Status**: ✅ PASSED
- Build time: 23.33s
- Vite 5.4.21
- No compilation errors
- All modules transform successfully
- Output: Ready for production deployment

---

## Backend (Java) - Drill Project Root

### ✅ Maven Checkstyle
```
mvn checkstyle:check -DskipTests
```
**Status**: ✅ PASSED (0 violations across all 59 modules)

**Modules Checked**:
- Drill Core (protocol, common, logical plan)
- Drill Exec (Java execution engine, memory, RPC, vectors)
- All 50+ contrib modules:
- Storage: JDBC, MongoDB, HBase, Cassandra, Elasticsearch, Splunk, GoogleSheets, Phoenix, Druid, Kudu, HTTP, Kafka, Hive, etc.
- Formats: XML, Syslog, Httpd/Nginx Logs, PDF, HDF5, SPSS, SAS, LTSV, Image, Pcap-NG, Esri, Excel, MS Access, Log Regex, Iceberg, Paimon, Delta Lake
- Utilities, UDFs, Packaging
- Metadata (Iceberg, Mongo, RDBMS)
- JDBC Driver
- On-YARN
- Distribution Assembly

**Build Time**: 7.857s

### ✅ Maven Clean Build
```
mvn clean
```
**Status**: ✅ PASSED (59/59 modules)

---

## Summary

| Tool | Status | Details |
|------|--------|---------|
| ESLint | ✅ PASS | 0 warnings, 0 errors (strict mode) |
| TypeScript | ✅ PASS | 0 type errors |
| Vite Build | ✅ PASS | Production ready |
| Maven Checkstyle | ✅ PASS | 0 violations in 59 modules |

### Code Quality Metrics
- **Frontend**: Fully type-safe, no linting issues
- **Backend**: All code follows Checkstyle guidelines (Google Java Style Guide)
- **Overall**: Production-ready code quality

---

## Recent Changes Verified
All recent changes related to tab selection UX and close tab improvements have passed linting:
- ✅ `src/pages/SqlLabPage.tsx` - Tab selection and close handler logic
- ✅ `src/hooks/useTabPersistence.ts` - Tab persistence with empty tab filtering
- ✅ `src/components/schema-explorer/SchemaExplorer.tsx` - Query navigator integration
- ✅ `src/components/schema-explorer/QueryNavigator.tsx` - Query selection UI

All changes are clean, type-safe, and follow project conventions.
1 change: 1 addition & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
4. Force Directed Graph Visualization
53 changes: 53 additions & 0 deletions build-frontend.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Build the SQL Lab frontend and update the distribution.
# Usage: ./build-frontend.sh

set -e

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
WEBAPP_DIR="$SCRIPT_DIR/exec/java-exec/src/main/resources/webapp"
DIST_BASE="$SCRIPT_DIR/distribution/target"

echo "=== Building SQL Lab frontend ==="
cd "$WEBAPP_DIR"
npm run build

echo ""
echo "=== Building java-exec module ==="
cd "$SCRIPT_DIR"
mvn package -pl exec/java-exec -DskipTests -Dcheckstyle.skip=true -q

# Find the distribution directory and copy the jar
DIST_DIR=$(find "$DIST_BASE" -name "jars" -type d 2>/dev/null | head -1)
if [ -n "$DIST_DIR" ]; then
echo ""
echo "=== Copying jar to distribution ==="
cp "$SCRIPT_DIR/exec/java-exec/target/drill-java-exec-"*"-SNAPSHOT.jar" "$DIST_DIR/"
echo "Updated: $DIST_DIR/"
else
echo ""
echo "WARNING: Distribution directory not found under $DIST_BASE"
echo "Run a full 'mvn package' first to create the distribution, or copy the jar manually:"
echo " cp exec/java-exec/target/drill-java-exec-*-SNAPSHOT.jar <drill-distribution>/jars/"
fi

echo ""
echo "=== Done! Restart Drill and hard-refresh your browser (Cmd+Shift+R) ==="
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,13 @@ public List<String> extensions() {
return this.extensions;
}

/**
* Standard getter for extensions, consistent with other FormatPluginConfig implementations.
*/
public List<String> getExtensions() {
return this.extensions;
}

public boolean combinePages() {
return this.combinePages;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,8 @@ public void close() {

/**
* This function processes the XML elements. This function stops reading when the
* limit (if any) which came from the query has been reached or the Iterator runs out of
* elements.
* limit (if any) which came from the query has been reached, a complete row has been
* read, or the Iterator runs out of elements.
* @return True if there are more elements to parse, false if not
*/
private boolean processElements() {
Expand Down Expand Up @@ -197,6 +197,13 @@ private boolean processElements() {

// Process the event
processEvent(currentEvent, lastEvent, reader.peek());

// After completing a row, return to let next() check batch capacity.
// This prevents batch overflow errors that occur when rows accumulate
// beyond what the batch can hold without the isFull() check running.
if (currentState == xmlState.ROW_ENDED) {
return true;
}
} catch (XMLStreamException e) {
throw UserException
.dataReadError(e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.testcontainers.DockerClientFactory;
import org.testcontainers.containers.CassandraContainer;

@Category(SlowTest.class)
Expand All @@ -42,6 +43,10 @@ public class TestCassandraSuite extends BaseTest {

@BeforeClass
public static void initCassandra() {
org.junit.Assume.assumeTrue(
"Docker is not available, skipping container tests",
DockerClientFactory.instance().isDockerAvailable()
);
synchronized (TestCassandraSuite.class) {
if (initCount.get() == 0) {
startCassandra();
Expand Down
Loading
Loading