internal async Task <CachedProcedure> GetCachedProcedure(IOBehavior ioBehavior, string name, CancellationToken cancellationToken) { if (State != ConnectionState.Open) { throw new InvalidOperationException("Connection is not open."); } if (m_session.ServerVersion.Version < ServerVersions.SupportsProcedureCache) { return(null); } if (m_cachedProcedures == null) { m_cachedProcedures = new Dictionary <string, CachedProcedure>(); } var normalized = NormalizedSchema.MustNormalize(name, Database); CachedProcedure cachedProcedure; if (!m_cachedProcedures.TryGetValue(normalized.FullyQualified, out cachedProcedure)) { cachedProcedure = await CachedProcedure.FillAsync(ioBehavior, this, normalized.Schema, normalized.Component, cancellationToken).ConfigureAwait(false); m_cachedProcedures[normalized.FullyQualified] = cachedProcedure; } return(cachedProcedure); }
public void ParseParameters(string sql, object[] expected) { var actual = CachedProcedure.ParseParameters(sql); Assert.Equal(expected.Length, actual.Count); for (int i = 0; i < expected.Length; i++) { var expectedParameter = (CachedParameter)expected[i]; var actualParameter = actual[i]; Assert.Equal(expectedParameter.Position, actualParameter.Position); Assert.Equal(expectedParameter.Direction, actualParameter.Direction); Assert.Equal(expectedParameter.Name, actualParameter.Name); Assert.Equal(expectedParameter.MySqlDbType, actualParameter.MySqlDbType); } }
public void ParseDataType(string sql, string expectedDataType, bool expectedUnsigned, int expectedLength) { var dataType = CachedProcedure.ParseDataType(sql, out var unsigned, out var length); Assert.Equal((expectedDataType, expectedUnsigned, expectedLength), (dataType, unsigned, length)); }