public string EmitStatementAsString(bool removeLineBreaks) { string statement = new D4TextEmitter().Emit(EmitStatement(EmitMode.ForCopy)); if (removeLineBreaks) { bool inWhiteSpace = false; StringBuilder builder = new StringBuilder(); for (int index = 0; index < statement.Length; index++) { if (Char.IsWhiteSpace(statement, index)) { if (!inWhiteSpace) { inWhiteSpace = true; builder.Append(" "); } } else { inWhiteSpace = false; builder.Append(statement[index]); } } return(builder.ToString()); } return(statement); }
private string SaveDeviceSettings(ServerProcess process) { D4TextEmitter emitter = new D4TextEmitter(); Block block = new Block(); IServerProcess localProcess = (IServerProcess)process; IServerCursor cursor = localProcess.OpenCursor("select Devices { ID }", null); try { using (IRow row = cursor.Plan.RequestRow()) { while (cursor.Next()) { cursor.Select(row); Schema.Device device = process.CatalogDeviceSession.ResolveCatalogObject((int)row[0 /*"ID"*/]) as Schema.Device; if ((device != null) && (device.ClassDefinition.Attributes.Count > 0)) { block.Statements.Add(SaveSystemDeviceSettings(device)); } } } } finally { localProcess.CloseCursor(cursor); } return(new D4TextEmitter().Emit(block) + "\r\n"); }
public string GetCatalog(RemoteParam[] paramsValue, out string catalogObjectName, out long cacheTimeStamp, out long clientCacheTimeStamp, out bool cacheChanged) { ServerExpressionPlan.CheckCompiled(); if (ServerExpressionPlan.ActualDataType is Schema.ICursorType) { _cacheObjectName = Schema.Object.NameFromGuid(ID); catalogObjectName = _cacheObjectName; } else { catalogObjectName = ServerExpressionPlan.DataType.Name; } #if LOGCACHEEVENTS ServerProcess.ServerSession.Server.LogMessage(String.Format("Getting catalog for expression '{0}'.", Header.Statement)); #endif cacheChanged = true; cacheTimeStamp = ServerExpressionPlan.ServerProcess.ServerSession.Server.CacheTimeStamp; string[] requiredObjects = _process.Session.Server.CatalogCaches.GetRequiredObjects(_process.Session, ServerExpressionPlan.Plan.PlanCatalog, cacheTimeStamp, out clientCacheTimeStamp); if (requiredObjects.Length > 0) { if (ServerExpressionPlan.ActualDataType is Schema.ICursorType) { string[] allButCatalogObject = new string[requiredObjects.Length - 1]; int targetIndex = 0; for (int index = 0; index < requiredObjects.Length; index++) { if (requiredObjects[index] != catalogObjectName) { allButCatalogObject[targetIndex] = requiredObjects[index]; targetIndex++; } } Block statement = allButCatalogObject.Length > 0 ? (Block)ServerExpressionPlan.Plan.PlanCatalog.EmitStatement(ServerExpressionPlan.ServerProcess.CatalogDeviceSession, EmitMode.ForRemote, allButCatalogObject) : new Block(); // Add variable declaration statements for any process context that may be being referenced by the plan for (int index = ServerExpressionPlan.ServerProcess.ProcessLocals.Count - 1; index >= 0; index--) { if (!ContainsParam(paramsValue, ServerExpressionPlan.ServerProcess.ProcessLocals[index].Name)) { statement.Statements.Add(new VariableStatement(ServerExpressionPlan.ServerProcess.ProcessLocals[index].Name, ServerExpressionPlan.ServerProcess.ProcessLocals[index].DataType.EmitSpecifier(EmitMode.ForRemote))); } } Block catalogObjectStatement = (Block)ServerExpressionPlan.Plan.PlanCatalog.EmitStatement(ServerExpressionPlan.ServerProcess.CatalogDeviceSession, EmitMode.ForRemote, new string[] { catalogObjectName }); statement.Statements.AddRange(catalogObjectStatement.Statements); string catalogString = new D4TextEmitter(EmitMode.ForRemote).Emit(statement); return(catalogString); } else { string catalogString = new D4TextEmitter(EmitMode.ForRemote).Emit(ServerExpressionPlan.Plan.PlanCatalog.EmitStatement(ServerExpressionPlan.ServerProcess.CatalogDeviceSession, EmitMode.ForRemote, requiredObjects)); return(catalogString); } } return(String.Empty); }
public override object InternalExecute(Program program, object[] arguments) { var tableVar = APIUtilities.ResolveTableVarName(program, (string)arguments[0]); var identifyingKey = APIUtilities.FindIdentifyingKey(program, tableVar); var keyValues = APIUtilities.GetKeyValues(program, identifyingKey, (string)arguments[1]); var keyEqualExpression = Compiler.BuildKeyEqualExpression(program.Plan, String.Empty, "AKey", new Schema.RowType(identifyingKey.Columns).Columns, keyValues.DataType.Columns); var updateStatement = new UpdateStatement(); updateStatement.Target = new IdentifierExpression(tableVar.Name); var row = (IRow)arguments[2]; for (int i = 0; i < row.DataType.Columns.Count; i++) { updateStatement.Columns.Add(new UpdateColumnExpression(new IdentifierExpression(row.DataType.Columns[i].Name), new IdentifierExpression(Schema.Object.Qualify(row.DataType.Columns[i].Name, "ARow")))); } updateStatement.Condition = keyEqualExpression; var statement = new D4TextEmitter().Emit(updateStatement); var dataParams = new DataParams(); dataParams.Add(new DataParam("AKey", keyValues.DataType, Modifier.In, keyValues)); dataParams.Add(new DataParam("ARow", row.DataType, Modifier.In, row)); APIUtilities.Execute(program, statement, dataParams); return(null); }
public override object InternalExecute(Program program, object[] arguments) { var tableVar = APIUtilities.ResolveTableVarName(program, (string)arguments[0]); var insertStatement = new InsertStatement(new IdentifierExpression("ARow"), new IdentifierExpression(tableVar.Name)); var statement = new D4TextEmitter().Emit(insertStatement); var dataParams = new DataParams(); var row = (IRow)arguments[1]; dataParams.Add(new DataParam("ARow", row.DataType, Modifier.In, row)); APIUtilities.Execute(program, statement, dataParams); return(null); }
public override object InternalExecute(Program program, object[] arguments) { var tableVar = APIUtilities.ResolveTableVarName(program, (string)arguments[0]); var identifyingKey = APIUtilities.FindIdentifyingKey(program, tableVar); var keyValues = APIUtilities.GetKeyValues(program, identifyingKey, (string)arguments[1]); var keyEqualExpression = Compiler.BuildKeyEqualExpression(program.Plan, String.Empty, "AKey", new Schema.RowType(identifyingKey.Columns).Columns, keyValues.DataType.Columns); var tableVarExpression = new IdentifierExpression(tableVar.Name); var restrictExpression = new RestrictExpression(tableVarExpression, keyEqualExpression); var expression = new D4TextEmitter().Emit(restrictExpression); var dataParams = new DataParams(); dataParams.Add(new DataParam("AKey", keyValues.DataType, Modifier.In, keyValues)); return(APIUtilities.EvaluateSingleton(program, expression, dataParams)); }
private string SaveSystemDeviceSettings() { D4TextEmitter emitter = new D4TextEmitter(); Block block = new Block(); if (_tempDevice.ClassDefinition.Attributes.Count > 0) { block.Statements.Add(SaveSystemDeviceSettings(_tempDevice)); } if (_aTDevice.ClassDefinition.Attributes.Count > 0) { block.Statements.Add(SaveSystemDeviceSettings(_aTDevice)); } if (_catalogDevice.ClassDefinition.Attributes.Count > 0) { block.Statements.Add(SaveSystemDeviceSettings(_catalogDevice)); } return(new D4TextEmitter().Emit(block) + "\r\n"); }
public string GetCatalog(string name, out long cacheTimeStamp, out long clientCacheTimeStamp, out bool cacheChanged) { cacheTimeStamp = _serverProcess.ServerSession.Server.CacheTimeStamp; Schema.Catalog catalog = new Schema.Catalog(); catalog.IncludeDependencies(_serverProcess.CatalogDeviceSession, _serverProcess.Catalog, _serverProcess.Catalog[name], EmitMode.ForRemote); #if LOGCACHEEVENTS FServerProcess.ServerSession.Server.LogMessage(String.Format("Getting catalog for data type '{0}'.", AName)); #endif cacheChanged = true; string[] requiredObjects = _session.Server.CatalogCaches.GetRequiredObjects(_session, catalog, cacheTimeStamp, out clientCacheTimeStamp); if (requiredObjects.Length > 0) { string catalogString = new D4TextEmitter(EmitMode.ForRemote).Emit(catalog.EmitStatement(_serverProcess.CatalogDeviceSession, EmitMode.ForRemote, requiredObjects)); return(catalogString); } return(String.Empty); }