-
Notifications
You must be signed in to change notification settings - Fork 7.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
317 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
import { ICredentialType, NodePropertyTypes } from 'n8n-workflow'; | ||
|
||
export class CrateDb implements ICredentialType { | ||
name = 'crateDb'; | ||
displayName = 'CrateDB'; | ||
properties = [ | ||
{ | ||
displayName: 'Host', | ||
name: 'host', | ||
type: 'string' as NodePropertyTypes, | ||
default: 'localhost', | ||
}, | ||
{ | ||
displayName: 'Database', | ||
name: 'database', | ||
type: 'string' as NodePropertyTypes, | ||
default: 'doc', | ||
}, | ||
{ | ||
displayName: 'User', | ||
name: 'user', | ||
type: 'string' as NodePropertyTypes, | ||
default: 'crate', | ||
}, | ||
{ | ||
displayName: 'Password', | ||
name: 'password', | ||
type: 'string' as NodePropertyTypes, | ||
typeOptions: { | ||
password: true, | ||
}, | ||
default: '', | ||
}, | ||
{ | ||
displayName: 'SSL', | ||
name: 'ssl', | ||
type: 'options' as NodePropertyTypes, | ||
options: [ | ||
{ | ||
name: 'disable', | ||
value: 'disable', | ||
}, | ||
{ | ||
name: 'allow', | ||
value: 'allow', | ||
}, | ||
{ | ||
name: 'require', | ||
value: 'require', | ||
}, | ||
{ | ||
name: 'verify (not implemented)', | ||
value: 'verify', | ||
}, | ||
{ | ||
name: 'verify-full (not implemented)', | ||
value: 'verify-full', | ||
}, | ||
], | ||
default: 'disable', | ||
}, | ||
{ | ||
displayName: 'Port', | ||
name: 'port', | ||
type: 'number' as NodePropertyTypes, | ||
default: 5432, | ||
}, | ||
]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,246 @@ | ||
import { IExecuteFunctions } from 'n8n-core'; | ||
import { IDataObject, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow'; | ||
|
||
import * as pgPromise from 'pg-promise'; | ||
|
||
import { pgInsert, pgQuery, pgUpdate } from '../Postgres/Postgres.node.functions'; | ||
|
||
export class CrateDb implements INodeType { | ||
description: INodeTypeDescription = { | ||
displayName: 'CrateDB', | ||
name: 'crateDb', | ||
icon: 'file:cratedb.png', | ||
group: ['input'], | ||
version: 1, | ||
description: 'Gets, add and update data in CrateDB.', | ||
defaults: { | ||
name: 'CrateDB', | ||
color: '#47889f', | ||
}, | ||
inputs: ['main'], | ||
outputs: ['main'], | ||
credentials: [ | ||
{ | ||
name: 'crateDb', | ||
required: true, | ||
}, | ||
], | ||
properties: [ | ||
{ | ||
displayName: 'Operation', | ||
name: 'operation', | ||
type: 'options', | ||
options: [ | ||
{ | ||
name: 'Execute Query', | ||
value: 'executeQuery', | ||
description: 'Executes a SQL query.', | ||
}, | ||
{ | ||
name: 'Insert', | ||
value: 'insert', | ||
description: 'Insert rows in database.', | ||
}, | ||
{ | ||
name: 'Update', | ||
value: 'update', | ||
description: 'Updates rows in database.', | ||
}, | ||
], | ||
default: 'insert', | ||
description: 'The operation to perform.', | ||
}, | ||
|
||
// ---------------------------------- | ||
// executeQuery | ||
// ---------------------------------- | ||
{ | ||
displayName: 'Query', | ||
name: 'query', | ||
type: 'string', | ||
typeOptions: { | ||
rows: 5, | ||
}, | ||
displayOptions: { | ||
show: { | ||
operation: ['executeQuery'], | ||
}, | ||
}, | ||
default: '', | ||
placeholder: 'SELECT id, name FROM product WHERE id < 40', | ||
required: true, | ||
description: 'The SQL query to execute.', | ||
}, | ||
|
||
// ---------------------------------- | ||
// insert | ||
// ---------------------------------- | ||
{ | ||
displayName: 'Schema', | ||
name: 'schema', | ||
type: 'string', | ||
displayOptions: { | ||
show: { | ||
operation: ['insert'], | ||
}, | ||
}, | ||
default: 'public', | ||
required: true, | ||
description: 'Name of the schema the table belongs to', | ||
}, | ||
{ | ||
displayName: 'Table', | ||
name: 'table', | ||
type: 'string', | ||
displayOptions: { | ||
show: { | ||
operation: ['insert'], | ||
}, | ||
}, | ||
default: '', | ||
required: true, | ||
description: 'Name of the table in which to insert data to.', | ||
}, | ||
{ | ||
displayName: 'Columns', | ||
name: 'columns', | ||
type: 'string', | ||
displayOptions: { | ||
show: { | ||
operation: ['insert'], | ||
}, | ||
}, | ||
default: '', | ||
placeholder: 'id,name,description', | ||
description: | ||
'Comma separated list of the properties which should used as columns for the new rows.', | ||
}, | ||
{ | ||
displayName: 'Return Fields', | ||
name: 'returnFields', | ||
type: 'string', | ||
displayOptions: { | ||
show: { | ||
operation: ['insert'], | ||
}, | ||
}, | ||
default: '*', | ||
description: 'Comma separated list of the fields that the operation will return', | ||
}, | ||
|
||
// ---------------------------------- | ||
// update | ||
// ---------------------------------- | ||
{ | ||
displayName: 'Table', | ||
name: 'table', | ||
type: 'string', | ||
displayOptions: { | ||
show: { | ||
operation: ['update'], | ||
}, | ||
}, | ||
default: '', | ||
required: true, | ||
description: 'Name of the table in which to update data in', | ||
}, | ||
{ | ||
displayName: 'Update Key', | ||
name: 'updateKey', | ||
type: 'string', | ||
displayOptions: { | ||
show: { | ||
operation: ['update'], | ||
}, | ||
}, | ||
default: 'id', | ||
required: true, | ||
description: | ||
'Name of the property which decides which rows in the database should be updated. Normally that would be "id".', | ||
}, | ||
{ | ||
displayName: 'Columns', | ||
name: 'columns', | ||
type: 'string', | ||
displayOptions: { | ||
show: { | ||
operation: ['update'], | ||
}, | ||
}, | ||
default: '', | ||
placeholder: 'name,description', | ||
description: | ||
'Comma separated list of the properties which should used as columns for rows to update.', | ||
}, | ||
], | ||
}; | ||
|
||
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> { | ||
const credentials = this.getCredentials('crateDb'); | ||
|
||
if (credentials === undefined) { | ||
throw new Error('No credentials got returned!'); | ||
} | ||
|
||
const pgp = pgPromise(); | ||
|
||
const config = { | ||
host: credentials.host as string, | ||
port: credentials.port as number, | ||
database: credentials.database as string, | ||
user: credentials.user as string, | ||
password: credentials.password as string, | ||
ssl: !['disable', undefined].includes(credentials.ssl as string | undefined), | ||
sslmode: (credentials.ssl as string) || 'disable', | ||
}; | ||
|
||
const db = pgp(config); | ||
|
||
let returnItems = []; | ||
|
||
const items = this.getInputData(); | ||
const operation = this.getNodeParameter('operation', 0) as string; | ||
|
||
if (operation === 'executeQuery') { | ||
// ---------------------------------- | ||
// executeQuery | ||
// ---------------------------------- | ||
|
||
const queryResult = await pgQuery(this.getNodeParameter, pgp, db, items); | ||
|
||
returnItems = this.helpers.returnJsonArray(queryResult as IDataObject[]); | ||
} else if (operation === 'insert') { | ||
// ---------------------------------- | ||
// insert | ||
// ---------------------------------- | ||
|
||
const [insertData, insertItems] = await pgInsert(this.getNodeParameter, pgp, db, items); | ||
|
||
// Add the id to the data | ||
for (let i = 0; i < insertData.length; i++) { | ||
returnItems.push({ | ||
json: { | ||
...insertData[i], | ||
...insertItems[i], | ||
}, | ||
}); | ||
} | ||
} else if (operation === 'update') { | ||
// ---------------------------------- | ||
// update | ||
// ---------------------------------- | ||
|
||
const updateItems = await pgUpdate(this.getNodeParameter, pgp, db, items); | ||
|
||
returnItems = this.helpers.returnJsonArray(updateItems); | ||
} else { | ||
await pgp.end(); | ||
throw new Error(`The operation "${operation}" is not supported!`); | ||
} | ||
|
||
// Close the connection | ||
await pgp.end(); | ||
|
||
return this.prepareOutputData(returnItems); | ||
} | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters