public void ToValidNameTest() { Assert.AreEqual("_1", SchemaProviderBase.ToValidName("1")); Assert.AreEqual("_1", SchemaProviderBase.ToValidName(" 1 ")); Assert.AreEqual("_1", SchemaProviderBase.ToValidName("\t1\t")); }
void PgSqlFixRecordResultFunctions() { var mappings = new List <(string, IList <string>)>(); foreach (var proc in _schema.Procedures .Where(p => p.IsFunction && !p.IsAggregateFunction && !p.IsTableFunction && p.Parameters.Any(pr => pr.IsOut))) { if (proc.Parameters.Count(pr => pr.IsOut) > 1) { var result = new TableSchema() { TypeName = SchemaProviderBase.ToValidName(proc.ProcedureName + "Result"), Columns = new List <ColumnSchema>(), IsProcedureResult = true, ForeignKeys = new List <ForeignKeySchema>() }; _schema.Tables.Add(result); proc.ResultTable = result; proc.Parameters.Add(new ParameterSchema() { IsResult = true, ParameterType = result.TypeName }); var resultMappings = new List <string>(); mappings.Add((result.TypeName, resultMappings)); foreach (var outParam in proc.Parameters.Where(_ => _.IsOut)) { //outParam.ParameterType, outParam.ParameterName, null, null result.Columns.Add(new ColumnSchema() { MemberType = outParam.ParameterType, MemberName = outParam.ParameterName }); resultMappings.Add($"{outParam.ParameterName} = ({outParam.ParameterType})tuple[{resultMappings.Count}]"); if (outParam.IsIn) { outParam.IsOut = false; } } proc.Parameters = proc.Parameters.Where(_ => !_.IsOut).ToList(); } else // one parameter { var param = proc.Parameters.Single(_ => _.IsOut); proc.Parameters.Remove(param); proc.Parameters.Add(new ParameterSchema() { IsResult = true, ParameterType = param.ParameterType }); } } if (mappings.Count > 0) { Code .AppendLine(" protected override void InitMappingSchema()") .AppendLine(" {"); foreach (var(typeName, valueMappings) in mappings) { Code.AppendLine($" MappingSchema.SetConvertExpression<object[], {typeName}>(tuple => new {typeName}() {{ {string.Join(", ", valueMappings)} }});"); } Code .AppendLine(" }"); } }