Skip to content

Commit f9e4501

Browse files
committed
Merge branch 'fix-schema-compiler-oracle-timestamp-iso8601' of https://github.com/tankilevitch/cube into fix-schema-compiler-oracle-timestamp-iso8601
2 parents b944111 + 53b8d90 commit f9e4501

File tree

170 files changed

+2975
-1050
lines changed

Some content is hidden

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

170 files changed

+2975
-1050
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

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/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

docs/pages/product/configuration/reference/environment-variables.mdx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,6 +1305,26 @@ If `true`, the DAX API will expose time dimensions as calendar hierarchies.
13051305
| --------------- | ---------------------- | --------------------- |
13061306
| `true`, `false` | `true` | `true` |
13071307

1308+
## `CUBE_XMLA_LANGUAGE`
1309+
1310+
This variable is used to [configure the locale][ref-mdx-api-locale] for the [MDX API][ref-mdx-api].
1311+
1312+
| Possible Values | Default in Development | Default in Production |
1313+
| --------------- | ---------------------- | --------------------- |
1314+
| Either a [LCID][link-lcid] (numeric) or a language tag (string) | `1033` (English - United States) | `1033` (English - United States) |
1315+
1316+
For example, to display currency values using the Netherlands locale (euro with comma as decimal separator), you can use either:
1317+
1318+
```bash
1319+
# LCID
1320+
CUBE_XMLA_LANGUAGE=1043
1321+
1322+
# Language tag
1323+
CUBE_XMLA_LANGUAGE=nl-NL
1324+
```
1325+
1326+
[link-lcid]: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/70feba9f-294e-491e-b6eb-56532684c37f
1327+
13081328
## `CUBEJS_NESTED_FOLDERS_DELIMITER`
13091329

13101330
Specifies the delimiter used to flatten the names of nested [folder][ref-folders] in
@@ -1809,3 +1829,5 @@ The port for a Cube deployment to listen to API connections on.
18091829
[ref-dataviz-tools]: /product/configuration/visualization-tools
18101830
[ref-context-to-app-id]: /product/configuration/reference/config#context_to_app_id
18111831
[ref-environments]: /product/workspace/environments
1832+
[ref-mdx-api]: /product/apis-integrations/mdx-api
1833+
[ref-mdx-api-locale]: /product/apis-integrations/mdx-api#measure-format

docs/plugins/link-environment-variables.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const isCubeEnvVar = (value) => {
77
"CUBEJS_",
88
"CUBESTORE_",
99
"CUBESQL_",
10+
"CUBE_",
1011
]
1112

1213
return (

0 commit comments

Comments
 (0)