private static string GetConnectionString(DbInstanceInfo dbInstanceInfo)
        {
            var connectionStringBuilder = new OracleConnectionStringBuilder();

            connectionStringBuilder.DataSource = $"(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port={dbInstanceInfo.Port})(host={dbInstanceInfo.Host}))(connect_data=(service_name={dbInstanceInfo.ServiceName}))(security=(my_wallet_directory=\"{Path.Combine(@"C:\Users\Nandan\source\repos\terraform-agent-dbor\src\WebApp", "Oracle")}\")(ssl_server_cert_dn=\"{dbInstanceInfo.SslServerCertDn}\")))";
            return(connectionStringBuilder.ConnectionString);
        }
        /// <inheritdoc/>
        public Task <OracleConnection> CreateConnectionAsync(DbInstanceInfo dbInstanceInfo, CancellationToken cancellationToken = default)
        {
            if (dbInstanceInfo == null)
            {
                throw new ArgumentNullException(nameof(dbInstanceInfo));
            }
            var connection = new OracleConnection(GetConnectionString(dbInstanceInfo), GetCredential(dbInstanceInfo));

            return(OpenConnectionAsync(connection, cancellationToken));
        }
        /// <inheritdoc/>
        public Task <OracleDataReader> ExecuteReaderAsync(DbInstanceInfo dbInstanceInfo, string sql, OracleParameter[] oracleParameters, CancellationToken cancellationToken = default)
        {
            if (dbInstanceInfo == null)
            {
                throw new ArgumentNullException(nameof(dbInstanceInfo));
            }
            if (string.IsNullOrWhiteSpace(sql))
            {
                throw new ArgumentNullException(nameof(sql));
            }

            return(ExecuteReaderAsyncInternal(dbInstanceInfo, sql, oracleParameters, cancellationToken));
        }
        /// <inheritdoc />
        public async Task <IEnumerable <TableDto> > GetTablesAsync(DbInstanceInfo dbInstanceInfo, string owner, int limit, int offset, CancellationToken cancellationToken = default)
        {
            if (dbInstanceInfo == null)
            {
                throw new ArgumentNullException(nameof(dbInstanceInfo));
            }

            using var connection = await _databaseHelper.CreateConnectionAsync(dbInstanceInfo, cancellationToken);

            var response = await connection.QueryAsync <TableDto>(
                getTablesQuery,
                new
            {
                owner,
                offset,
                limit
            });

            return(response);
        }
        /// <inheritdoc />
        public async Task <TableDto> GetTableAsync(DbInstanceInfo dbInstanceInfo, string owner, string tableName, CancellationToken cancellationToken = default)
        {
            if (dbInstanceInfo == null)
            {
                throw new ArgumentNullException(nameof(dbInstanceInfo));
            }

            using var connection = await _databaseHelper.CreateConnectionAsync(dbInstanceInfo, cancellationToken);

            TableDto response;

            response = await connection.QuerySingleOrDefaultAsync <TableDto>(
                getTableQuery,
                new
            {
                owner,
                tableName
            });

            if (response == null)
            {
                throw new TableNotFoundException(dbInstanceInfo.Alias, owner, tableName);
            }

            response.Columns = (
                await connection.QueryAsync <ColumnDto>(
                    getColumnQuery,
                    new
            {
                owner,
                tableName
            }))
                               .ToList();

            return(response);
        }
 private static OracleCredential GetCredential(DbInstanceInfo dbInstanceInfo)
 {
     return(new OracleCredential(dbInstanceInfo.UserName, dbInstanceInfo.Password));
 }
        private async Task <OracleDataReader> ExecuteReaderAsyncInternal(DbInstanceInfo dbInstanceInfo, string sql, OracleParameter[] oracleParameters, CancellationToken cancellationToken = default)
        {
            using var connection = await CreateConnectionAsync(dbInstanceInfo, cancellationToken);

            return(await ExecuteReaderAsyncInternal(connection, sql, oracleParameters, cancellationToken));
        }