internal static IDbDistributedLock CreateInternalLock(string name, string connectionString, Action <OracleConnectionOptionsBuilder>?options)
        {
            if (connectionString == null)
            {
                throw new ArgumentNullException(nameof(connectionString));
            }

            var(keepaliveCadence, useMultiplexing) = OracleConnectionOptionsBuilder.GetOptions(options);

            if (useMultiplexing)
            {
                return(new OptimisticConnectionMultiplexingDbDistributedLock(name, connectionString, OracleMultiplexedConnectionLockPool.Instance, keepaliveCadence));
            }

            return(new DedicatedConnectionOrTransactionDbDistributedLock(name, () => new OracleDatabaseConnection(connectionString), useTransaction: false, keepaliveCadence));
        }
        internal static (TimeoutValue keepaliveCadence, bool useMultiplexing) GetOptions(Action <OracleConnectionOptionsBuilder>?optionsBuilder)
        {
            OracleConnectionOptionsBuilder?options;

            if (optionsBuilder != null)
            {
                options = new OracleConnectionOptionsBuilder();
                optionsBuilder(options);
            }
            else
            {
                options = null;
            }

            var keepaliveCadence = options?._keepaliveCadence ?? Timeout.InfiniteTimeSpan;
            var useMultiplexing  = options?._useMultiplexing ?? true;

            return(keepaliveCadence, useMultiplexing);
        }