Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BigQuery tests #85

Merged
merged 50 commits into from
Dec 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
3ce2fc0
testing main yml
MXPOL Dec 5, 2021
0723063
disable other tests
MXPOL Dec 5, 2021
f543e41
print errors
MXPOL Dec 5, 2021
ef4efc8
log errors
MXPOL Dec 5, 2021
81d01ca
test fefactor bigquery
MXPOL Dec 6, 2021
a4bb952
test if in yml file
MXPOL Dec 6, 2021
bf2f757
main yml refactor to support ifs
MXPOL Dec 6, 2021
abd935b
main yml refactor to support ifs
MXPOL Dec 6, 2021
0f400b5
main yml refactor to support ifs
MXPOL Dec 6, 2021
c5f7012
testing main yml
MXPOL Dec 5, 2021
b2a2419
disable other tests
MXPOL Dec 5, 2021
c66fd65
print errors
MXPOL Dec 5, 2021
6d15375
log errors
MXPOL Dec 5, 2021
293d0cb
test fefactor bigquery
MXPOL Dec 6, 2021
2aa18ee
test if in yml file
MXPOL Dec 6, 2021
a4c58f1
main yml refactor to support ifs
MXPOL Dec 6, 2021
b2c7b5e
main yml refactor to support ifs
MXPOL Dec 6, 2021
ff063d8
main yml refactor to support ifs
MXPOL Dec 6, 2021
aacef07
removed dead code
noam-almog Dec 15, 2021
3ef66c4
minor changes
MXPOL Dec 15, 2021
7ffebf8
Merge branch 'bigquery-github-actions-tests' of github.com:wix-privat…
MXPOL Dec 15, 2021
2a32746
refactored data to use schemaFieldsFor instead of parsing schema on d…
noam-almog Dec 16, 2021
ffcf35b
refactor tests for schema (#101)
noam-almog Dec 16, 2021
14d56a7
refactor tests for data (#102)
noam-almog Dec 16, 2021
8a492fb
deps
noam-almog Dec 16, 2021
faa21d2
refactor data async tests
noam-almog Dec 16, 2021
1975dcc
testing main yml
MXPOL Dec 5, 2021
6dc74ab
disable other tests
MXPOL Dec 5, 2021
b579793
print errors
MXPOL Dec 5, 2021
b9874d1
log errors
MXPOL Dec 5, 2021
330800f
test fefactor bigquery
MXPOL Dec 6, 2021
9dad999
test if in yml file
MXPOL Dec 6, 2021
8ace2df
main yml refactor to support ifs
MXPOL Dec 6, 2021
8c05edc
main yml refactor to support ifs
MXPOL Dec 6, 2021
c894cd2
main yml refactor to support ifs
MXPOL Dec 6, 2021
192e961
minor changes
MXPOL Dec 15, 2021
a6abcb6
testing main yml
MXPOL Dec 5, 2021
b6f1476
disable other tests
MXPOL Dec 5, 2021
b0d72eb
print errors
MXPOL Dec 5, 2021
6d761c0
test fefactor bigquery
MXPOL Dec 6, 2021
ef3b141
test if in yml file
MXPOL Dec 6, 2021
ef20459
main yml refactor to support ifs
MXPOL Dec 6, 2021
96198a3
main yml refactor to support ifs
MXPOL Dec 6, 2021
9b02820
main yml refactor to support ifs
MXPOL Dec 6, 2021
2abbdf7
disable test only for BigQuery
MXPOL Dec 19, 2021
20b4e99
Merge branch 'bigquery-github-actions-tests' of github.com:wix-privat…
MXPOL Dec 19, 2021
d1bd8d4
nop
MXPOL Dec 19, 2021
b810126
nop
MXPOL Dec 19, 2021
06de723
Merge branch 'bigquery-github-actions-tests' of github.com:wix-privat…
MXPOL Dec 19, 2021
ee0514f
disable bigquery tests for now
MXPOL Dec 19, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,68 @@ jobs:
run: |
cd packages/velo-external-db/test/resources
docker compose down

# test_bigquery:
# runs-on: ubuntu-latest
# strategy:
# matrix:
# database: ["bigquery"]

# steps:
# - uses: actions/checkout@v2

# - name: Use Node.js 14
# uses: actions/setup-node@v2
# with:
# node-version: 14

# - name: Restore Dependencies
# uses: actions/cache@v2
# with:
# path: |
# node_modules
# */*/node_modules
# key: ${{ runner.os }}-${{ hashFiles('**/package.json') }}

# - name: Downloading Docker Compose V2
# if: ${{ ( matrix.database != 'bigquery') }}
# run: |
# curl -sfL https://raw.githubusercontent.com/docker/compose-cli/main/scripts/install/install_linux.sh | sh
# docker compose version

# - name: Downloading Image
# if: ${{ ( matrix.database != 'bigquery') }}
# run: |
# cd packages/velo-external-db/test/resources
# docker compose pull --quiet ${{ matrix.database }}

# - name: Start Container
# if: ${{ ( matrix.database != 'bigquery') }}
# run: |
# cd packages/velo-external-db/test/resources
# docker compose up --detach ${{ matrix.database }}

# - id: auth
# if: ${{ ( matrix.database == 'bigquery') }}
# uses: google-github-actions/[email protected]
# with:
# credentials_json: ${{ secrets.ACTIONS_GCP_CREDENTIALS }}

# - name: Set up Cloud SDK
# if: ${{ ( matrix.database == 'bigquery') }}
# uses: google-github-actions/[email protected]

# - name: Installing Dependencies
# run: npm install

# - name: Install dependencies of the homemade packages.
# run: npm run build:dev

# - name: Testing
# run: npm run test:${{ matrix.database }}

# - name: Stop Container
# if: ${{ ( matrix.database != 'bigquery') }}
# run: |
# cd packages/velo-external-db/test/resources
# docker compose down
4 changes: 2 additions & 2 deletions packages/external-db-airtable/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@
},
"devDependencies": {
"chance": "^1.1.8",
"jest": "^27.4.4",
"jest": "^27.4.5",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1",
"jest-when": "^3.4.2"
"jest-when": "^3.5.0"
}
}
14 changes: 4 additions & 10 deletions packages/external-db-bigquery/lib/bigquery_data_provider.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,10 @@ class DataProvider {
}

async insert(collectionName, items) {
// const patchedItems = items.map(patchDateTime)
// const itemsArr = patchedItems.map( item => `(${Object.values(item).map(i => typeof(i) === 'number' ? i : `"${i}"`).join(', ')})` ).join(', ')
// const sql = `INSERT INTO \`${collectionName}\` (${Object.keys(items[0]).join(', ')}) VALUES ${itemsArr}`

// const res = await this.pool.query(sql).catch( translateErrorCodes )

const table = await this.pool.table(collectionName)
const res = await table.insert(items)
return res
await table.insert(items)

return items.length
}

async update(collectionName, items) {
Expand Down Expand Up @@ -82,7 +76,7 @@ class DataProvider {
const resultSet = await this.pool.query({ query: sql, params: [...whereParameters, ...parameters] })
.catch( translateErrorCodes )

return resultSet[0]
return resultSet[0].map( unPatchDateTime )
}
}

Expand Down
45 changes: 24 additions & 21 deletions packages/external-db-bigquery/lib/bigquery_schema_provider.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,61 +5,64 @@ const { SystemFields, validateSystemFields, parseTableData } = require('velo-ext

const escapeIdentifier = i => i
class SchemaProvider {
constructor(pool) {
constructor(pool, { projectId, databaseId }) {
this.projectId = projectId
this.databaseId = databaseId
this.pool = pool
this.sqlSchemaTranslator = new SchemaColumnTranslator()
}

async list() {
const res = await this.pool.query('SELECT table_name, column_name AS field, data_type as type, FROM INFORMATION_SCHEMA.COLUMNS')
const res = await this.pool.query(`SELECT table_name, column_name AS field, data_type as type, FROM ${this.projectId}.${this.databaseId}.INFORMATION_SCHEMA.COLUMNS`)
const tables = parseTableData(res[0])

return Object.entries(tables)
.map(([collectionName, rs]) => ({
id: collectionName,
fields: rs.map( this.translateDbTypes.bind(this) )
}))
.map(([collectionName, rs]) => ({
id: collectionName,
fields: rs.map( this.translateDbTypes.bind(this) )
}))
}

async create(collectionName, _columns) {
const columns = _columns || []
const dbColumnsSql = [...SystemFields, ...columns].map( c => this.sqlSchemaTranslator.columnToDbColumnSql(c))
const dbColumnsSql = [...SystemFields, ...columns].map(c => this.sqlSchemaTranslator.columnToDbColumnSql(c))
await this.pool.createTable(collectionName, { schema: dbColumnsSql })
.catch(translateErrorCodes)
.catch(translateErrorCodes)
}

async drop(collectionName) {
await this.pool.table(collectionName).delete()
.catch(translateErrorCodes)
.catch(translateErrorCodes)
}


async addColumn(collectionName, column) {
async addColumn(collectionName, column) {
await validateSystemFields(column.name)

await this.pool.query(`ALTER TABLE ${escapeIdentifier(collectionName)} ADD COLUMN ${escapeIdentifier(column.name)} ${this.sqlSchemaTranslator.dbTypeFor(column)}`)
.catch(translateErrorCodes)

try{
await this.pool.query(`ALTER TABLE ${escapeIdentifier(collectionName)} ADD COLUMN ${escapeIdentifier(column.name)} ${this.sqlSchemaTranslator.dbTypeFor(column)}`)
} catch (err) {
if (err.message.includes('was not found'))
throw new CollectionDoesNotExists('Collection does not exists')
else
translateErrorCodes(err)
}
}

async removeColumn(collectionName, columnName) {
await validateSystemFields(columnName)

await this.pool.query(`CREATE OR REPLACE TABLE ${escapeIdentifier(collectionName)} AS SELECT * EXCEPT (${escapeIdentifier(columnName)}) FROM ${escapeIdentifier(collectionName)}`)
.catch(translateErrorCodes)

await this.pool.query(`CREATE OR REPLACE TABLE ${this.projectId}.${this.databaseId}.${escapeIdentifier(collectionName)} AS SELECT * EXCEPT (${escapeIdentifier(columnName)}) FROM ${escapeIdentifier(collectionName)}`)
.catch(translateErrorCodes)
}

async describeCollection(collectionName) {
const res = await this.pool.query(`SELECT table_name, column_name AS field, data_type as type, FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name="${escapeIdentifier(collectionName)}"`)
const res = await this.pool.query(`SELECT table_name, column_name AS field, data_type as type, FROM ${this.projectId}.${this.databaseId}.INFORMATION_SCHEMA.COLUMNS WHERE table_name="${escapeIdentifier(collectionName)}"`)

if (res[0].length === 0) {
throw new CollectionDoesNotExists('Collection does not exists')
}

return res[0].map( this.translateDbTypes.bind(this) )
}


translateDbTypes(row) {
row.type = this.sqlSchemaTranslator.translateType(row.type)
return row
Expand Down
2 changes: 1 addition & 1 deletion packages/external-db-bigquery/lib/bigquery_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const unPatchDateTime = (item) => {
if (reISO.test(value)) {
obj[key] = new Date(value)
} else {
obj[key] = item[key]
obj[key] = item[key].toNumber ? item[key].toNumber() : item[key]
}
}

Expand Down
6 changes: 3 additions & 3 deletions packages/external-db-bigquery/lib/connection_provider.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ const DatabaseOperations = require ('./bigquery_operations')
const SchemaProvider = require('./bigquery_schema_provider')
const DataProvider = require('./bigquery_data_provider')

const init = ( cfg ) => {
const init = ({ projectId, databaseId }) => {
const bigquery = new BigQuery()
const pool = bigquery.dataset(cfg.databaseId)
const pool = bigquery.dataset(databaseId)

const filterParser = new FilterParser()
const databaseOperations = new DatabaseOperations(pool)
const dataProvider = new DataProvider(pool, filterParser)
const schemaProvider = new SchemaProvider(pool)
const schemaProvider = new SchemaProvider(pool, { projectId, databaseId })

return { dataProvider: dataProvider, schemaProvider: schemaProvider, databaseOperations, connection: pool, cleanup: async() => {} }
}
Expand Down
2 changes: 1 addition & 1 deletion packages/external-db-bigquery/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"devDependencies": {
"chance": "^1.1.8",
"jest-each": "^27.4.2",
"jest-when": "^3.4.2",
"jest-when": "^3.5.0",
"test-commons": "^0.0.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ const givenOrderByFor = (column, sort) => {

const givenFilterByIdWith = (id, filter) => {
when(filterParser.transform).calledWith(filter)
.mockReturnValue({ filterExpr: `WHERE ${escapeIdentifier('_id')} = $1`, parameters: [id], offset: 2 })
.mockReturnValue({ filterExpr: `WHERE ${escapeIdentifier('_id')} = ?`, parameters: [id], offset: 2 })
}

const givenAggregateQueryWith = (having, numericColumns, columnAliases, groupByColumns, filter, offest) => {
when(filterParser.parseAggregation).calledWith(having, filter, offest)
when(filterParser.parseAggregation).calledWith(having, filter)
.mockReturnValue({
fieldsStatement: `${groupByColumns.map( escapeIdentifier ).join(', ')}, MAX(${escapeIdentifier(numericColumns[0].name)}) AS ${escapeIdentifier(columnAliases[0])}, SUM(${escapeIdentifier(numericColumns[1].name)}) AS ${escapeIdentifier(columnAliases[1])}`,
groupByColumns: groupByColumns,
Expand Down
6 changes: 3 additions & 3 deletions packages/external-db-config/lib/readers/gcp_config_reader.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,13 @@ class GcpBigQueryConfigReader {
}

async readConfig() {
const { DATABASE_ID, SECRET_KEY } = process.env
return { databaseId: DATABASE_ID, secretKey: SECRET_KEY }
const { PROJECT_ID, DATABASE_ID, SECRET_KEY } = process.env
return { projectId: PROJECT_ID, databaseId: DATABASE_ID, secretKey: SECRET_KEY }
}

validate() {
return {
missingRequiredSecretsKeys: checkRequiredKeys(process.env, ['DATABASE_ID', 'SECRET_KEY'])
missingRequiredSecretsKeys: checkRequiredKeys(process.env, ['PROJECT_ID', 'DATABASE_ID', 'SECRET_KEY'])
}
}

Expand Down
4 changes: 2 additions & 2 deletions packages/external-db-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@
"devDependencies": {
"aws-sdk-client-mock": "^0.5.6",
"chance": "^1.1.8",
"jest": "^27.4.4",
"jest": "^27.4.5",
"jest-each": "^27.4.2",
"jest-when": "^3.4.2",
"jest-when": "^3.5.0",
"ts-jest": "^27.1.1",
"test-commons": "^0.0.0"
},
Expand Down
4 changes: 2 additions & 2 deletions packages/external-db-dynamodb/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
},
"devDependencies": {
"chance": "^1.1.8",
"jest": "^27.4.4",
"jest-when": "^3.4.2",
"jest": "^27.4.5",
"jest-when": "^3.5.0",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1"
}
Expand Down
4 changes: 2 additions & 2 deletions packages/external-db-firestore/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
"velo-external-db-commons": "^0.0.0"
},
"devDependencies": {
"jest": "^27.4.4",
"jest-when": "^3.4.2",
"jest": "^27.4.5",
"jest-when": "^3.5.0",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/external-db-google-sheets/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"velo-external-db-commons": "^0.0.0"
},
"devDependencies": {
"jest": "^27.4.4",
"jest": "^27.4.5",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1"
}
Expand Down
6 changes: 3 additions & 3 deletions packages/external-db-mongo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
"url": "https://github.com/wix-private/noam-external-db-poc/issues"
},
"dependencies": {
"mongodb": "^4.2.1",
"mongodb": "^4.2.2",
"velo-external-db-commons": "^0.0.0"
},
"devDependencies": {
"jest": "^27.4.4",
"jest-when": "^3.4.2",
"jest": "^27.4.5",
"jest-when": "^3.5.0",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1",
"chance": "^1.1.8"
Expand Down
4 changes: 2 additions & 2 deletions packages/external-db-mssql/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@
"velo-external-db-commons": "^0.0.0"
},
"devDependencies": {
"jest": "^27.4.4",
"jest-when": "^3.4.2",
"jest": "^27.4.5",
"jest-when": "^3.5.0",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1",
"chance": "^1.1.8"
Expand Down
4 changes: 2 additions & 2 deletions packages/external-db-mysql/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
"velo-external-db-commons": "^0.0.0"
},
"devDependencies": {
"jest": "^27.4.4",
"jest-when": "^3.4.2",
"jest": "^27.4.5",
"jest-when": "^3.5.0",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1",
"chance": "^1.1.8"
Expand Down
4 changes: 2 additions & 2 deletions packages/external-db-postgres/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@
"velo-external-db-commons": "^0.0.0"
},
"devDependencies": {
"jest": "^27.4.4",
"jest-when": "^3.4.2",
"jest": "^27.4.5",
"jest-when": "^3.5.0",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1",
"chance": "^1.1.8"
Expand Down
4 changes: 2 additions & 2 deletions packages/external-db-spanner/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
},
"devDependencies": {
"chance": "^1.1.8",
"jest": "^27.4.4",
"jest": "^27.4.5",
"jest-each": "^27.4.2",
"jest-when": "^3.4.2",
"jest-when": "^3.5.0",
"test-commons": "^0.0.0",
"ts-jest": "^27.1.1"
},
Expand Down
Loading