public static void PersistArticle(DbConnection currentDbConnection, string customerCode, string xml, out int id) { var databaseType = DatabaseTypeHelper.ResolveDatabaseType(currentDbConnection); var ns = SqlQuerySyntaxHelper.DbSchemaName(databaseType); var sql = $"select id, modified from {ns}.qp_persist_article(@xml)"; using (var cmd = DbCommandFactory.Create(sql, currentDbConnection)) { cmd.Parameters.Add(SqlQuerySyntaxHelper.GetXmlParameter("@xml", xml, databaseType)); var dt = new DataTable(); try { DataAdapterFactory.Create(cmd).Fill(dt); } catch (PostgresException ex) { Logger.Error() .Exception(ex) .Message("Error while persisting article with xml: {xml}\n Query: {sql}", xml, sql) .Property("customerCode", customerCode) .Write(); throw; } id = (int)dt.Rows[0]["id"]; } }
private static string GetSelectExpression(DatabaseType dbType, RelationSecurityPathItem n) { if (n.IsClassifier) { return($"c{n.JoinOrder}.{SqlQuerySyntaxHelper.EscapeEntityName(dbType, n.AttributeName)}"); } var fieldName = dbType == DatabaseType.Postgres ? $"\"{n.RelContentId}\"" : $"'{n.RelContentId}'"; var castToInt = dbType == DatabaseType.Postgres ? "::integer" : string.Empty; return(n.LinkId.HasValue ? $"{SqlQuerySyntaxHelper.DbSchemaName(dbType)}.qp_link_ids({n.LinkId}{castToInt}, c{n.JoinOrder}.CONTENT_ITEM_ID{castToInt}, {SqlQuerySyntaxHelper.ToBoolSql(dbType, true)}) as {fieldName}" : $"{SqlQuerySyntaxHelper.CastToString(dbType, $"c{n.Order}.content_item_id")} as {fieldName}"); }
internal static string DbSchemaName(DatabaseType databaseType) => SqlQuerySyntaxHelper.DbSchemaName(databaseType);