Skip to content

Commit 87388b9

Browse files
authored
Merge branch 'master' into merge-security-context
2 parents 5be6baa + 644fbd4 commit 87388b9

File tree

173 files changed

+2981
-1056
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

173 files changed

+2981
-1056
lines changed

.github/workflows/labeler.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: "Pull Request Automatic Labeler"
22

33
on:
4-
pull_request:
4+
pull_request_target:
55
types: [opened, synchronize, reopened]
66

77
jobs:
@@ -11,7 +11,8 @@ jobs:
1111
contents: read
1212
pull-requests: write
1313
steps:
14-
- uses: actions/labeler@v6
14+
- name: Run Labeler
15+
uses: actions/labeler@v6
1516
with:
1617
repo-token: "${{ secrets.GITHUB_TOKEN }}"
1718
configuration-path: .github/labeler.yml

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,32 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
## [1.3.81](https://github.com/cube-js/cube/compare/v1.3.80...v1.3.81) (2025-10-16)
7+
8+
### Features
9+
10+
- **tesseract:** Full outer join support ([#10057](https://github.com/cube-js/cube/issues/10057)) ([a315737](https://github.com/cube-js/cube/commit/a3157376815d71ed2e37805c9d7dff61ded3c665))
11+
12+
## [1.3.80](https://github.com/cube-js/cube/compare/v1.3.79...v1.3.80) (2025-10-15)
13+
14+
### Features
15+
16+
- **schema-compiler:** Use views join maps and hints for query joins construction ([#10039](https://github.com/cube-js/cube/issues/10039)) ([f556b62](https://github.com/cube-js/cube/commit/f556b62691c473490c7f27b7ac759c2ffb89d2ff))
17+
18+
## [1.3.79](https://github.com/cube-js/cube/compare/v1.3.78...v1.3.79) (2025-10-14)
19+
20+
### Bug Fixes
21+
22+
- **client-vue3:** Cleanup polluted package-lock file ([da98986](https://github.com/cube-js/cube/commit/da98986ded60d55cebc903061dc795a76e6332bc))
23+
- **cubesql:** Normalize timestamp/date expressions ([#10040](https://github.com/cube-js/cube/issues/10040)) ([7b1a5af](https://github.com/cube-js/cube/commit/7b1a5afe983e5191becb5eabd1381632acab133e))
24+
- **sqlite-driver:** Use pragma_table_info to fetch table columns ([#10031](https://github.com/cube-js/cube/issues/10031)) ([070e6e0](https://github.com/cube-js/cube/commit/070e6e0d016537af293e3dc7ec02791072ccba42))
25+
26+
### Features
27+
28+
- **cubesql:** PlanNormalize - reduce stack allocations ([#10055](https://github.com/cube-js/cube/issues/10055)) ([619343d](https://github.com/cube-js/cube/commit/619343d0e2962de99786ca47e298ab00afb3d776))
29+
- **docs:** Integrate Purple Banner component into documentation site ([#10053](https://github.com/cube-js/cube/issues/10053)) ([32df746](https://github.com/cube-js/cube/commit/32df746362b1d2d199e4f8616db3fd4080b4712d))
30+
- **firebolt-driver:** Pass CUBEJS_DB_QUERY_TIMEOUT to Firebolt driver ([#10043](https://github.com/cube-js/cube/issues/10043)) ([b46565b](https://github.com/cube-js/cube/commit/b46565b0d41ec8c3cfd7caf0a51dc5ee89d1df90))
31+
632
## [1.3.78](https://github.com/cube-js/cube/compare/v1.3.77...v1.3.78) (2025-10-03)
733

834
### Bug Fixes

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ Cube.is written in a mixture of JavaScript, TypeScript, and Rust. TypeScript and
101101
11. Run `yarn link @cubejs-backend/server-core` in your project directory.
102102
12. Run `yarn dev` to start your testing project and verify changes.
103103

104-
Instead of running all of the above commands manually you can use the `dev_env_setup.sh` script:
104+
Instead of running all of the above commands manually you can use the `dev-env.sh` script:
105105

106106
1. Clone the Cube repository, `git clone https://github.com/cube-js/cube`.
107-
2. Navigate to your working projects directory and run `/path/to/cube/repo/dev_env_setup.sh`. The script will
107+
2. Navigate to your working projects directory and run `/path/to/cube/repo//dev-env.sh setup`. The script will
108108
ask you some questions and run all the required commands. In case you decide to create a new testing project,
109109
it will be created in the current directory (that is why you probably don't want to run this script within
110110
cube repo directory).

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
![]()
2+
<p align="center">
3+
<a href="https://cube.registration.goldcast.io/events/a6a3b4b8-a99f-489a-b740-060182dbce7b"><img src="https://lgo0ecceic.ucarecd.net/cd698180-3d96-4644-9c9e-daf299ecf3ea/" alt="Agentic Analytics Summit" width="100%"></a>
4+
</p>
15
<p align="center">
26
<a href="https://cube.dev?ref=github-readme"><img src="https://raw.githubusercontent.com/cube-js/cube/master/docs/content/cube-logo-with-bg.png" alt="Cube — Semantic Layer for Data Applications" width="300px"></a>
37
</p>
@@ -9,7 +13,7 @@
913
[![GitHub Actions](https://github.com/cube-js/cube/workflows/Build/badge.svg)](https://github.com/cube-js/cube/actions?query=workflow%3ABuild+branch%3Amaster)
1014
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fcube-js%2Fcube.js.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fcube-js%2Fcube.js?ref=badge_shield)
1115

12-
__Cube is the universal semantic layer for modern data applications.__ Born in the cloud era, Cube represents the next evolution of OLAP technology, helping data engineers and application developers access data from modern data stores, organize it into consistent definitions, and deliver it to every application.
16+
__Cube Core is an open-source semantic layer and LookML alternative.__ It can be used by data professionals to access data from modern data stores, organize it into consistent definitions, and deliver it to every application. Cube Core is headless and comes with multiple APIs for embedded analytics and BI: REST, GraphQL and SQL. If you are looking for a fully integrated platform, similar to Looker, check out our commercial product - [Cube](https://cube.dev).
1317

1418
<img
1519
src="https://ucarecdn.com/8d945f29-e9eb-4e7f-9e9e-29ae7074e195/"

docs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
},
1616
"dependencies": {
1717
"@cube-dev/marketing-ui": "0.0.1-beta.22",
18+
"@cube-dev/purple-banner": "https://github.com/cubedevinc/purple-banner/releases/download/v2.0.21/cube-dev-purple-banner-2.0.21.tgz",
1819
"@cubejs-client/core": "^0.32.17",
1920
"@radix-ui/react-dialog": "^1.0.4",
2021
"@radix-ui/react-navigation-menu": "^1.1.3",

docs/pages/_app.tsx

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ import "@/styles/images.css";
88
import "katex/dist/katex.min.css";
99
import "@cube-dev/marketing-ui/dist/index.css";
1010

11+
import PurpleBanner from '@cube-dev/purple-banner';
1112
import localFont from "next/font/local";
1213
import { Inter } from "next/font/google";
1314
import { SearchProvider } from "@cube-dev/marketing-ui";
1415
import { useRouter } from 'next/router';
15-
import { useEffect } from 'react';
16+
import { useEffect, useState } from 'react';
1617

1718
export const SourceCodePro = localFont({
1819
src: "../fonts/SourceCodePro-Regular.woff2",
@@ -65,6 +66,11 @@ type Props = { origin: string | null };
6566

6667
export default function MyApp({ origin, Component, pageProps }: AppProps & Props) {
6768
const router = useRouter()
69+
const [pbVisible, setPbVisible] = useState(false)
70+
71+
useEffect(() => {
72+
requestAnimationFrame(() => setPbVisible(true))
73+
}, [])
6874

6975
// Track page views
7076
useEffect(() => {
@@ -97,8 +103,31 @@ export default function MyApp({ origin, Component, pageProps }: AppProps & Props
97103
--font-mono: ${JetBrainsMono.style.fontFamily};
98104
--font-code: ${SourceCodePro.style.fontFamily};
99105
--cube-font: ${CeraPro.style.fontFamily};
106+
--purple-banner-font: ${CeraPro.style.fontFamily};
107+
}
108+
.pb-wrapper {
109+
max-height: 0;
110+
overflow: hidden;
111+
transition: max-height 0.3s linear;
112+
will-change: max-height;
113+
}
114+
.pb-wrapper--visible {
115+
max-height: 100px;
116+
}
117+
@media (max-width: 796px) {
118+
.pb-wrapper--visible {
119+
max-height: 160px;
120+
}
100121
}
101122
`}</style>
123+
124+
<div className={pbVisible ? 'pb-wrapper pb-wrapper--visible' : 'pb-wrapper'}>
125+
<PurpleBanner
126+
utmSource="cube.dev"
127+
debugMode={process.env.NEXT_PUBLIC_SHOW_PURPLE_BANNER === 'true'}
128+
/>
129+
</div>
130+
102131
<Component {...pageProps} />
103132
</SearchProvider>
104133
);

docs/pages/product/apis-integrations/mdx-api.mdx

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,15 @@ directly to the upstream data source.
5353
- If some queries still go to the upstream data source, it should respond with a
5454
subsecond latency. Consider tuning the concurrency and quotas to achieve that.
5555

56+
### Measure format
57+
58+
The MDX API respects the [`format` parameter][ref-measure-format] of measures so that the
59+
values are displayed accordingly in Excel, i.e., `percent` formats values as percentages
60+
and `currency` formats values as monetary values.
61+
62+
Currency formatting is locale-aware and responds to the language configuration set via
63+
the `CUBE_XMLA_LANGUAGE` environment variable.
64+
5665
## Using MDX API with Excel
5766

5867
<InfoBox>
@@ -180,59 +189,10 @@ This is going to be harmonized in the future.
180189
181190
</InfoBox>
182191
183-
## Formatting
184-
185-
MDX API supports formatting for measures to control how values are displayed in Excel.
186-
187-
### Percent format
188-
189-
You can format measures as percentages using the `percent` format type:
190-
191-
```yaml
192-
cubes:
193-
- name: orders
194-
sql_table: ORDERS
195-
196-
measures:
197-
- name: completion_rate
198-
sql: "COUNT(CASE WHEN {CUBE}.status = 'completed' THEN 1 END) / COUNT(*)"
199-
type: number
200-
format: percent
201-
```
202-
203-
### Currency format
204-
205-
You can format measures as currency using the `currency` format type:
206-
207-
```yaml
208-
cubes:
209-
- name: orders
210-
sql_table: ORDERS
211-
212-
measures:
213-
- name: total_revenue
214-
sql: "{CUBE}.amount"
215-
type: sum
216-
format: currency
217-
```
218-
219-
Currency formatting is locale-aware and responds to the language configuration set via the `CUBE_XMLA_LANGUAGE` environment variable. This variable accepts either [Microsoft LCID (Locale Identifier)][link-lcid] values or language tags. The default value is `1033` (English - United States).
220-
221-
For example, to display currency values using the Netherlands locale (Euro with comma as decimal separator), you can use either:
222-
223-
```bash
224-
# Using LCID
225-
CUBE_XMLA_LANGUAGE=1043
226-
227-
# Using language tag
228-
CUBE_XMLA_LANGUAGE=nl-NL
229-
```
230-
231192
## Authentication and authorization
232193
233194
Authentication and authorization work the same as for the [SQL API](/product/apis-integrations/sql-api/security).
234195
235-
[link-lcid]: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/70feba9f-294e-491e-b6eb-56532684c37f
236196
[ref-excel]: /product/configuration/visualization-tools/excel
237197
[link-mdx]: https://learn.microsoft.com/en-us/analysis-services/multidimensional-models/mdx/multidimensional-model-data-access-analysis-services-multidimensional-data?view=asallproducts-allversions#bkmk_querylang
238198
[link-pivottable]: https://support.microsoft.com/en-us/office/create-a-pivottable-to-analyze-worksheet-data-a9a84538-bfe9-40a9-a8e9-f99134456576
@@ -242,4 +202,5 @@ Authentication and authorization work the same as for the [SQL API](/product/api
242202
[ref-views]: /product/data-modeling/concepts#views
243203
[ref-deployment]: /product/deployment/cloud/deployments
244204
[ref-pre-aggregations]: /product/caching/using-pre-aggregations
245-
[ref-rollup-only-mode]: /product/caching/using-pre-aggregations#rollup-only-mode
205+
[ref-rollup-only-mode]: /product/caching/using-pre-aggregations#rollup-only-mode
206+
[ref-measure-format]: /product/data-modeling/reference/measures#format

docs/pages/product/apis-integrations/recipes/cast-numerics.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,5 @@ you work with "safe integers".
152152
[link-js-numbers]: https://www.w3schools.com/js/js_numbers.asp
153153
[link-mdn-max-safe-integer]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
154154

155-
[ref-cube-core]: http://localhost:3000/product/apis-integrations/javascript-sdk/reference/cubejs-client-core
156-
[ref-cube-core-cast-numerics]: http://localhost:3000/product/apis-integrations/javascript-sdk/reference/cubejs-client-core#loadmethodoptions
155+
[ref-cube-core]: /product/apis-integrations/javascript-sdk/reference/cubejs-client-core
156+
[ref-cube-core-cast-numerics]: /product/apis-integrations/javascript-sdk/reference/cubejs-client-core#loadmethodoptions

docs/pages/product/caching/recipes/joining-multiple-data-sources.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ cubes:
7272

7373
joins:
7474
suppliers:
75-
sql: "{supplier_id} = ${suppliers.id}"
75+
sql: "{supplier_id} = {suppliers.id}"
7676
relationship: many_to_one
7777
```
7878

docs/pages/product/caching/using-pre-aggregations.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ This technique, together with multi-router Cube Store approach, allows you to ac
270270

271271
In general, it's better to lean towards less partitions, as long as you are satisfied with query speed.
272272

273-
For optimal _querying performance_, partitions should be small enough so that the Cube Store workers can process them in less than 100 milliseconds.
273+
For optimal _querying performance_, partitions should be small enough so that a Cube Store worker can read (scan) a partition in less than 100 milliseconds.
274274
The best way to optimize this is to start from a relatively large partition (e.g., yearly or no partition at all if data permits),
275275
check what the [flame graph][ref-flame-graph] in Query History shows, then iterate as needed.
276276

0 commit comments

Comments
 (0)