private void AppendInterfaceDef(TsClass classModel, ScriptBuilder sb, TsGeneratorOutput generatorOutput) { AddNamespaceHeaderEnum(classModel.Name, classModel.Type.Assembly.FullName, sb); var typeName = this.GetTypeName(classModel); var visibility = this.GetTypeVisibility(classModel, typeName) ? "export " : ""; _docAppender.AppendClassDoc(sb, classModel, typeName); sb.AppendFormatIndented("{0}interface {1}", visibility, typeName); if (classModel.BaseType != null) { sb.AppendFormat(" extends {0}", this.GetFullyQualifiedTypeName(classModel.BaseType)); } var interfaces = classModel.Interfaces.Where(m => CsharpTypeInfoProvider.ExposedInterfaces.Contains(m.Type)).ToList(); if (interfaces.Count > 0) { var implementations = interfaces.Select(GetFullyQualifiedTypeName).ToArray(); var prefixFormat = " implements {0}"; sb.AppendFormat(prefixFormat, string.Join(" ,", implementations)); } sb.AppendLine(" {"); GenerateProperties(classModel, sb, generatorOutput); sb.AppendLineIndented("}"); _generatedClasses.Add(classModel); }
/// <summary> /// /// </summary> private void BuildUpdateCommand() { ScriptBuilder.Append("UPDATE "); ScriptBuilder.AppendFormat(Table.ToString()); ScriptBuilder.Append(" SET "); foreach (var column in Table.GetAdditionalColumns()) { ScriptBuilder.Append(column.Name); ScriptBuilder.Append(Strings.Equal); ScriptBuilder.Append($"@{column.Name}"); ScriptBuilder.AppendIf(Columns.IsNotLast(column), Strings.Comma); ScriptBuilder.Append(Strings.WhiteSpace); } var primaryColumn = Table.GetPrimaryColumnName(); ScriptBuilder.Append("WHERE "); ScriptBuilder.Append(primaryColumn); ScriptBuilder.Append(Strings.Equal); ScriptBuilder.Append($"@{primaryColumn}"); ScriptBuilder.AppendLine(); ScriptBuilder.AppendLine("ELSE"); }
/// <summary> /// /// </summary> /// <param name="column"></param> private void BuildIdentity(ColumnInfo column) { if (column.Identity != null) { ScriptBuilder.AppendFormat(" IDENTITY({0},{1})", column.Identity.Increment, column.Identity.Seed); } }
public void WhenAppendFormatString_StrignIsAppended() { _sb.AppendFormat("test {0}", 1); var script = _sb.ToString(); Assert.Equal("test 1", script); }
/// <summary> /// /// </summary> /// <param name="classModel"></param> /// <param name="sb"></param> /// <param name="generatorOutput"></param> protected override void AppendClassDefinition(TsClass classModel, ScriptBuilder sb, TsGeneratorOutput generatorOutput) { string typeName = this.GetTypeName(classModel); string visibility = this.GetTypeVisibility(classModel, typeName) ? "export " : ""; sb.AppendFormatIndented("{0}interface {1}", visibility, typeName); if (classModel.BaseType != null) { sb.AppendFormat(" extends {0}", this.GetFullyQualifiedTypeName(classModel.BaseType)); } sb.AppendLine(" {"); var members = new List <TsProperty>(); if ((generatorOutput & TsGeneratorOutput.Properties) == TsGeneratorOutput.Properties) { members.AddRange(classModel.Properties); } if ((generatorOutput & TsGeneratorOutput.Fields) == TsGeneratorOutput.Fields) { members.AddRange(classModel.Fields); } using (sb.IncreaseIndentation()) { foreach (var property in members) { if (property.IsIgnored) { continue; } var propTypeName = this.GetPropertyType(property); if (property.PropertyType.IsCollection()) { //Note: new member functon checking if property is collection or not //Also remove the array brackets from the name if (propTypeName.Length > 2 && propTypeName.Substring(propTypeName.Length - 2) == "[]") { propTypeName = propTypeName.Substring(0, propTypeName.Length - 2); } propTypeName = "KnockoutViewModelArray<" + propTypeName + ">"; } else if (property.PropertyType.Type.IsClass && property.PropertyType.Type != typeof(string)) { // KnockoutViewModel does not emit observable objects for classes, it leaves the class in-situ. // It's just value types, collections and strings that are observable. } else { propTypeName = "KnockoutObservable<" + propTypeName + ">"; } sb.AppendLineIndented(string.Format("{0}: {1};", this.GetPropertyName(property), propTypeName)); } } sb.AppendLineIndented("}"); _generatedClasses.Add(classModel); }
/// <summary> /// /// </summary> private void BuildIfStatement() { ScriptBuilder.Append("IF EXISTS(SELECT * FROM "); ScriptBuilder.AppendFormat(Table.GetSqlName()); ScriptBuilder.Append(" WHERE "); var primaryColumn = Table.GetPrimaryColumnName(); ScriptBuilder.Append(primaryColumn); ScriptBuilder.Append(Strings.Equal); ScriptBuilder.Append($"@{primaryColumn}"); ScriptBuilder.Append(Strings.RBracket); ScriptBuilder.AppendLine(); }
/// <summary> /// /// </summary> private void BuildInsertCommand() { ScriptBuilder.Append("INSERT INTO "); ScriptBuilder.AppendFormat(Table.ToString()); ScriptBuilder.Append(Strings.LBracket); foreach (var column in Columns) { ScriptBuilder.Append(column.Name); ScriptBuilder.AppendIf(Columns.IsNotLast(column), ", "); } ScriptBuilder.AppendLine(Strings.RBracket); ScriptBuilder.Append("VALUES("); foreach (var column in Columns) { ScriptBuilder.Append($"@{column.Name}"); ScriptBuilder.AppendIf(Columns.IsNotLast(column), ", "); } ScriptBuilder.Append(Strings.RBracket); ScriptBuilder.Append(Strings.Semicolon); }
private void AppendClassDef(TsClass classModel, ScriptBuilder sb, TsGeneratorOutput generatorOutput) { AddNamespaceHeader(classModel.Name, sb); var typeName = this.GetTypeName(classModel); var visibility = this.GetTypeVisibility(classModel, typeName) ? "export " : ""; AddRequestRenameInformation(sb, classModel); AddDocCommentForCustomJsonConverter(sb, classModel); _docAppender.AppendClassDoc(sb, classModel, typeName); sb.AppendFormatIndented("{0}class {1}", visibility, typeName); if (CsharpTypeInfoProvider.StringAbstractions.Contains(classModel.Type)) { sb.AppendLineIndented(" extends String {}"); return; } void EnforceBaseClass <TInterface, TBase>() { if (classModel.BaseType != null) { return; } if (classModel.Type == typeof(TBase)) { return; } if (typeof(TInterface).IsAssignableFrom(classModel.Type)) { classModel.BaseType = new TsClass(typeof(TBase)); } } EnforceBaseClass <IAnalyzer, AnalyzerBase>(); EnforceBaseClass <ITokenizer, TokenizerBase>(); EnforceBaseClass <ITokenFilter, TokenFilterBase>(); EnforceBaseClass <ICharFilter, CharFilterBase>(); EnforceBaseClass <IProperty, PropertyBase>(); EnforceBaseClass <IResponse, ResponseBase>(); if (classModel.BaseType != null) { sb.AppendFormat(" extends {0}", this.GetFullyQualifiedTypeName(classModel.BaseType)); } var interfaces = classModel.Interfaces.Where(m => CsharpTypeInfoProvider.ExposedInterfaces.Contains(m.Type)).ToList(); if (interfaces.Count > 0) { var implementations = interfaces.Select(GetFullyQualifiedTypeName).ToArray(); var prefixFormat = " implements {0}"; sb.AppendFormat(prefixFormat, string.Join(" ,", implementations)); } sb.AppendLine(" {"); GenerateProperties(classModel, sb, generatorOutput); sb.AppendLineIndented("}"); _generatedClasses.Add(classModel); //generate a closed cat response type (NEST uses catresponse<TRecord> for all) if (typeof(ICatRecord).IsAssignableFrom(classModel.Type)) { var catResponseName = classModel.Type.Name.Replace("Record", "Response"); AddNamespaceHeader(classModel.Name, sb); sb.AppendLineIndented($"class {catResponseName} extends ResponseBase {{"); using (sb.IncreaseIndentation()) sb.AppendLineIndented($"records: {typeName}[];"); sb.AppendLineIndented("}"); } }