add mssqldb connect
This commit is contained in:
@@ -7,3 +7,4 @@ DB_NAME='vanillameta'
|
|||||||
|
|
||||||
CORS_ORIGIN='*'
|
CORS_ORIGIN='*'
|
||||||
|
|
||||||
|
api propertyfile fix
|
||||||
24
backend-api/Dockerfile
Normal file
24
backend-api/Dockerfile
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
|
RUN apt-get -qq update
|
||||||
|
RUN apt-get -qq upgrade --yes
|
||||||
|
RUN apt-get -qq install curl --yes
|
||||||
|
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
|
||||||
|
RUN apt-get -qq install nodejs --yes
|
||||||
|
|
||||||
|
RUN apt-get install chromium-browser --yes
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
COPY tsconfig.json .
|
||||||
|
COPY tsconfig.build.json .
|
||||||
|
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
CMD ["npm", "run", "start"]
|
||||||
7
backend-api/db/conf.d/my.cnf
Normal file
7
backend-api/db/conf.d/my.cnf
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
[client]
|
||||||
|
default-character-set = utf8mb4
|
||||||
|
|
||||||
|
[mysql]
|
||||||
|
default-character-set = utf8mb4
|
||||||
131
backend-api/docker-compose.yml
Normal file
131
backend-api/docker-compose.yml
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
version: "3.7"
|
||||||
|
services:
|
||||||
|
main:
|
||||||
|
build:
|
||||||
|
context: ./
|
||||||
|
dockerfile: ./Dockerfile
|
||||||
|
ports:
|
||||||
|
- "4000:4000"
|
||||||
|
networks:
|
||||||
|
- vanillameta
|
||||||
|
depends_on:
|
||||||
|
- mysql
|
||||||
|
# - pg
|
||||||
|
links:
|
||||||
|
- "mysql:mysqldb"
|
||||||
|
# - "pg"
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
- .env.dev
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
mysql:
|
||||||
|
container_name: vanillameta_mysql
|
||||||
|
image: mysql
|
||||||
|
ports:
|
||||||
|
- "3306:3306"
|
||||||
|
networks:
|
||||||
|
- vanillameta
|
||||||
|
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
|
||||||
|
MYSQL_CHARSET: utf8mb4
|
||||||
|
MYSQL_DATABASE: ${DB_NAME}
|
||||||
|
MYSQL_USER: ${DB_USERNAME}
|
||||||
|
MYSQL_PASSWORD: ${DB_PASSWORD}
|
||||||
|
TZ: Asia/Seoul
|
||||||
|
restart: always
|
||||||
|
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||||
|
--default_authentication_plugin=mysql_native_password
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- mysql:/var/lib/mysql
|
||||||
|
- ./db/conf.d:/etc/mysql/conf.d
|
||||||
|
|
||||||
|
# mariadb:
|
||||||
|
# container_name: vanillameta_mariadb
|
||||||
|
# extra_hosts:
|
||||||
|
# - "host.docker.internal:host-gateway"
|
||||||
|
# image: mariadb
|
||||||
|
# ports:
|
||||||
|
# - "3308:3308"
|
||||||
|
# networks:
|
||||||
|
# - vanillameta
|
||||||
|
# environment:
|
||||||
|
# MYSQL_ROOT_PASSWORD: 'strongpassword'
|
||||||
|
# MYSQL_CHARSET: utf8mb4
|
||||||
|
# MYSQL_DATABASE: ${DB_NAME}
|
||||||
|
# MYSQL_USER: ${DB_USERNAME}
|
||||||
|
# MYSQL_PASSWORD: ${DB_PASSWORD}
|
||||||
|
# TZ: Asia/Seoul
|
||||||
|
# restart: always
|
||||||
|
# volumes:
|
||||||
|
# - ./db:/var/lib/maria
|
||||||
|
|
||||||
|
# pg:
|
||||||
|
# container_name: vanillameta_pg
|
||||||
|
# image: postgres
|
||||||
|
# ports:
|
||||||
|
# - "5432:5432"
|
||||||
|
# networks:
|
||||||
|
# - vanillameta
|
||||||
|
# environment:
|
||||||
|
# POSTGRES_ROOT_PASSWORD: 'strongpassword'
|
||||||
|
# POSTGRES_CHARSET: utf8mb4
|
||||||
|
# POSTGRES_DATABASE: ${DB_NAME}
|
||||||
|
# POSTGRES_USER: ${DB_USERNAME}
|
||||||
|
# POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||||
|
# POSTGRES_HOST_AUTH_METHOD: "trust"
|
||||||
|
# TZ: Asia/Seoul
|
||||||
|
# restart: always
|
||||||
|
# # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||||
|
# volumes:
|
||||||
|
# - mysql:/var/lib/mysql
|
||||||
|
# - ./db/conf.d:/etc/porstgressql/data
|
||||||
|
|
||||||
|
|
||||||
|
# oracledb:
|
||||||
|
# container_name: vanillameta_oracle
|
||||||
|
# image: oracleinanutshell/oracle-xe-11g
|
||||||
|
# ports:
|
||||||
|
# - "1521:1521"
|
||||||
|
# networks:
|
||||||
|
# - vanillameta
|
||||||
|
# environment:
|
||||||
|
# ORACLE_CHARSET: utf8mb4
|
||||||
|
# ORACLE_DATABASE: ${DB_NAME}
|
||||||
|
# ORACLE_USER: ${DB_USERNAME}
|
||||||
|
# ORACLE_PASSWORD: ${DB_PASSWORD}
|
||||||
|
# TZ: Asia/Seoul
|
||||||
|
# restart: always
|
||||||
|
# # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||||
|
# volumes:
|
||||||
|
# - mysql:/var/lib/mysql
|
||||||
|
# - ./db/conf.d:/etc/porstgressql/data
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# mssql:
|
||||||
|
# container_name: vanillameta_mssql
|
||||||
|
# image: mcr.microsoft.com/azure-sql-edge
|
||||||
|
# ports:
|
||||||
|
# - "1433:1433"
|
||||||
|
# networks:
|
||||||
|
# - vanillameta
|
||||||
|
# environment:
|
||||||
|
# ACCEPT_EULA: "Y"
|
||||||
|
# MSSQL_SA_PASSWORD: ${DB_PASSWORD}
|
||||||
|
# MSSQL_AGENT_ENABLED: "true"
|
||||||
|
# restart: always
|
||||||
|
# command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||||
|
#
|
||||||
|
# volumes:
|
||||||
|
# - ./vanillameta_mssqldata:/var/opt/mssql
|
||||||
|
#
|
||||||
|
# - ./db/conf.d:/etc/mysql/conf.d
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mysql:
|
||||||
|
networks:
|
||||||
|
vanillameta:
|
||||||
|
|
||||||
BIN
backend-api/instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg
Normal file
BIN
backend-api/instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg
Normal file
Binary file not shown.
@@ -44,6 +44,7 @@
|
|||||||
"class-validator": "^0.13.2",
|
"class-validator": "^0.13.2",
|
||||||
"cookie-parser": "^1.4.5",
|
"cookie-parser": "^1.4.5",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
|
"dylib-node": "^1.0.10",
|
||||||
"js-joda": "^1.11.0",
|
"js-joda": "^1.11.0",
|
||||||
"knex": "^2.3.0",
|
"knex": "^2.3.0",
|
||||||
"knex-bigquery": "^2.0.3",
|
"knex-bigquery": "^2.0.3",
|
||||||
|
|||||||
@@ -25,13 +25,12 @@ import { ConnectionModule } from './connection/connection.module';
|
|||||||
username: process.env.DB_USERNAME,
|
username: process.env.DB_USERNAME,
|
||||||
password: process.env.DB_PASSWORD,
|
password: process.env.DB_PASSWORD,
|
||||||
database: process.env.DB_NAME,
|
database: process.env.DB_NAME,
|
||||||
// type: 'sqlite',
|
|
||||||
// database: 'vanillameta',
|
|
||||||
autoLoadEntities: true,
|
autoLoadEntities: true,
|
||||||
entities: [__dirname + '/**/*.entity{.ts,.js}'],
|
entities: [__dirname + '/**/*.entity{.ts,.js}'],
|
||||||
synchronize: false,
|
synchronize: false,
|
||||||
logging: process.env.NODE_ENV == 'dev',
|
logging: process.env.NODE_ENV == 'dev',
|
||||||
retryAttempts: 1,
|
retryAttempts: 1
|
||||||
|
|
||||||
}),
|
}),
|
||||||
DatabaseModule,
|
DatabaseModule,
|
||||||
DatasetModule,
|
DatasetModule,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { Database } from '../database/entities/database.entity';
|
|||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import { ResponseStatus } from '../common/enum/response-status.enum';
|
import { ResponseStatus } from '../common/enum/response-status.enum';
|
||||||
|
import { oracledb } from 'oracledb'
|
||||||
|
|
||||||
const knexConnections = new Map<number, Knex>();
|
const knexConnections = new Map<number, Knex>();
|
||||||
|
|
||||||
@@ -66,10 +67,10 @@ export class ConnectionService {
|
|||||||
useNullAsDefault: true,
|
useNullAsDefault: true,
|
||||||
};
|
};
|
||||||
createDatabaseDto.connectionConfig = JSON.stringify(connectionConfig);
|
createDatabaseDto.connectionConfig = JSON.stringify(connectionConfig);
|
||||||
|
|
||||||
let _knex: Knex;
|
let _knex: Knex;
|
||||||
let returnObj = {};
|
let returnObj = {};
|
||||||
try {
|
try {
|
||||||
|
console.log(connectionConfig)
|
||||||
_knex = knex(connectionConfig as Knex.Config);
|
_knex = knex(connectionConfig as Knex.Config);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('knex not connected');
|
console.log('knex not connected');
|
||||||
@@ -101,14 +102,56 @@ export class ConnectionService {
|
|||||||
const fields = [];
|
const fields = [];
|
||||||
const resultObj = { status: ResponseStatus.SUCCESS, message: 'success', datas: [], fields: [] };
|
const resultObj = { status: ResponseStatus.SUCCESS, message: 'success', datas: [], fields: [] };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const queryRes = await knex.raw(queryExecuteDto.query);
|
const queryRes = await knex.raw(queryExecuteDto.query);
|
||||||
|
|
||||||
switch (knex.client.config.client) {
|
switch (knex.client.config.client) {
|
||||||
case 'mysql':
|
case 'mysql2':
|
||||||
if (queryRes && queryRes.length > 0) {
|
if (queryRes && queryRes[0].length > 0) {
|
||||||
|
|
||||||
datas = queryRes[0];
|
datas = queryRes[0];
|
||||||
const tempFields = queryRes[1];
|
const tempFields = queryRes[1];
|
||||||
|
tempFields.map(field => {
|
||||||
|
const fieldInfo = {
|
||||||
|
columnName: field.name,
|
||||||
|
columnLength: field._tableLength,
|
||||||
|
columnType: FieldTypeUtil.mysqlFieldType(field.columnType),
|
||||||
|
};
|
||||||
|
fields.push(fieldInfo);
|
||||||
|
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'pg':
|
||||||
|
if (queryRes && queryRes.rows.length > 0) {
|
||||||
|
|
||||||
|
datas = queryRes.rows;
|
||||||
|
const tempFields = queryRes.fields;
|
||||||
|
tempFields.map(field => {
|
||||||
|
const fieldInfo = {
|
||||||
|
columnName: field.name,
|
||||||
|
columnLength: field.length,
|
||||||
|
columnType: FieldTypeUtil.mysqlFieldType(field.type),
|
||||||
|
};
|
||||||
|
fields.push(fieldInfo);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
case 'mssql':
|
||||||
|
if (queryRes && queryRes.length > 0) {
|
||||||
|
|
||||||
|
datas = queryRes;
|
||||||
|
for(let i = 0; i < Object.keys(queryRes[0]).length; i ++){
|
||||||
|
console.log(Object.keys[i])
|
||||||
|
}
|
||||||
|
const tempFields = queryRes;
|
||||||
tempFields.map(field => {
|
tempFields.map(field => {
|
||||||
const fieldInfo = {
|
const fieldInfo = {
|
||||||
columnName: field.name,
|
columnName: field.name,
|
||||||
@@ -118,7 +161,8 @@ export class ConnectionService {
|
|||||||
fields.push(fieldInfo);
|
fields.push(fieldInfo);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
resultObj.datas = datas;
|
resultObj.datas = datas;
|
||||||
resultObj.fields = fields;
|
resultObj.fields = fields;
|
||||||
@@ -129,6 +173,7 @@ export class ConnectionService {
|
|||||||
console.log(e.sqlMessage);
|
console.log(e.sqlMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return resultObj;
|
return resultObj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,4 +20,4 @@ const expressApp = express();
|
|||||||
await app.listen(4000);
|
await app.listen(4000);
|
||||||
}
|
}
|
||||||
|
|
||||||
bootstrap();
|
bootstrap();
|
||||||
@@ -1 +1 @@
|
|||||||
REACT_APP_API_URL='http://localhost:4000'
|
REACT_APP_API_URL='http://localhost_dev:4000'
|
||||||
0
identifier.sqlite
Normal file
0
identifier.sqlite
Normal file
Reference in New Issue
Block a user