/// <exclude/> public Lookup(SerializationInfo serializationInfo, StreamingContext streamingContext) { int version = 0; if (SerializationVersionExists) { try { version = serializationInfo.GetInt32("SerializationVersion"); } catch (SerializationException) { // ignore SerializationVersionExists = false; } } _alias = serializationInfo.GetString("Alias"); _aliasPlural = serializationInfo.GetString("AliasPlural"); _enabled = serializationInfo.GetBoolean("Enabled"); _isUserDefined = serializationInfo.GetBoolean("IsUserDefined"); _name = serializationInfo.GetString("Name"); _userOptions = (List<IUserOption>)serializationInfo.GetValue("UserOptions", ModelTypes.UserOptionList); _description = serializationInfo.GetString("Description"); _backingObject = (ScriptObject)serializationInfo.GetValue("BackingObject", ModelTypes.ScriptObject); _idColumn = (Column)serializationInfo.GetValue("IdColumn", ModelTypes.Column); _nameColumn = (Column)serializationInfo.GetValue("NameColumn", ModelTypes.Column); _LookupValues = (List<LookupValue>)serializationInfo.GetValue("LookupValues", ModelTypes.LookupValueList); }
private void buttonOk_Click(object sender, EventArgs e) { for (int i = this.Controls.Count - 1; i >= 0; i--) { Control control = this.Controls[i]; control.Focus(); if (!Validate()) { DialogResult = DialogResult.None; return; } } if (IsNew) { _column = new Column(textBoxName.Text, true, _parent, _parent.Columns.Length, checkBoxIsNullable.Checked, comboBoxDataType.Text, Convert.ToInt32(textBoxCharacterMaximumLength.Text), false, false, textBoxDefault.Text, true); _column.Alias = textBoxAlias.Text; _column.AliasDisplay = textBoxAliasDisplay.Text; } else { _column.Name = textBoxName.Text; _column.Alias = textBoxAlias.Text; _column.AliasDisplay = textBoxAliasDisplay.Text; _column.IsNullable = checkBoxIsNullable.Checked; _column.DataType = comboBoxDataType.Text; _column.CharacterMaximumLength = Convert.ToInt32(textBoxCharacterMaximumLength.Text); } }
private void AddFilterColumn(Column column) { string logicalOperator; if (radioButtonFilterAnd.Checked) { logicalOperator = "And"; } else if (radioButtonFilterOr.Checked) { logicalOperator = "Or"; } else { logicalOperator = ""; radioButtonFilterAnd.Checked = true; radioButtonFilterAnd.Enabled = true; radioButtonFilterOr.Enabled = true; } Filter.FilterColumn filterColumn = new Filter.FilterColumn(column, logicalOperator, comboBoxCompareOperator.Text, textBoxFilterColumnAlias.Text); ListViewItem item = new ListViewItem(filterColumn.LogicalOperator); item.SubItems.Add(filterColumn.Column.Parent.Alias); item.SubItems.Add(filterColumn.Column.Alias); item.SubItems.Add(filterColumn.Alias); item.SubItems.Add(filterColumn.CompareOperator); item.Tag = filterColumn; listViewColumn.Items.Add(item); CheckAbilityToCreateProcedure(); comboBoxCompareOperator.Text = ""; textBoxFilterColumnAlias.Text = ""; }
/// <exclude/> public RestrictedValue(SerializationInfo serializationInfo, StreamingContext streamingContext) { int version = 0; if (SerializationVersionExists) { try { version = serializationInfo.GetInt32("SerializationVersion"); } catch (SerializationException) { // ignore SerializationVersionExists = false; } } _alias = serializationInfo.GetString("Alias"); _aliasPlural = serializationInfo.GetString("AliasPlural"); _enabled = serializationInfo.GetBoolean("Enabled"); _isUserDefined = serializationInfo.GetBoolean("IsUserDefined"); _name = serializationInfo.GetString("Name"); _userOptions = (List<IUserOption>)serializationInfo.GetValue("UserOptions", ModelTypes.UserOptionList); _id = serializationInfo.GetString("Id"); _description = serializationInfo.GetString("Description"); _parent = (Column)serializationInfo.GetValue("Parent", ModelTypes.Column); }
public bool IsDataTypeText(Column column) { switch (column.DataType) { case "char": return true; case "nchar": return true; case "ntext": return true; case "nvarchar": return true; case "text": return true; case "varchar": return true; default: return false; } }
private Model.View GetNewView(SQLDMO.View dmoView) { Model.View view = new Model.View(dmoView.Name, Script.GetSingluar(dmoView.Name), false); // Columns int ordinalPosition = 0; List<SQLDMO.Column> dmoColumns = new List<SQLDMO.Column>(); SQLDMO.SQLObjectList sqlObjectList = dmoView.ListColumns(); foreach (SQLDMO.Column dmoColumn in sqlObjectList) { dmoColumns.Add(dmoColumn); } dmoColumns.Sort(new SortComparer<SQLDMO.Column>("ID", System.ComponentModel.ListSortDirection.Ascending)); foreach (SQLDMO.Column dmoColumn in dmoColumns) { if (UnsupportedDataTypes.ToLower().IndexOf("'" + dmoColumn.PhysicalDatatype.ToLower() + "'") >= 0) { continue; } Column column = new Column(dmoColumn.Name, Script.GetSingluar(dmoColumn.Name), false, dmoColumn.Name, view, ordinalPosition, dmoColumn.AllowNulls, dmoColumn.PhysicalDatatype, dmoColumn.Length, false, dmoColumn.Identity, dmoColumn.Default, true); view.AddColumn(column); ordinalPosition++; } return view; }
public RestrictedValue(string name, bool isUserDefined, Column parent, object id, string description) : base(name, isUserDefined) { _parent = parent; _id = id; _description = description; ResetDefaults(); }
public MapColumn(string name, bool isUserDefined, Relationship[] relationshipPath, Column foreignColumn, int ordinalPosition, bool isNullable, string dataType, int characterMaximumLength, int precision, int scale) : base(name, isUserDefined, relationshipPath == null ? null : relationshipPath[0].Parent, ordinalPosition, isNullable, dataType, characterMaximumLength, false, false, null, true, false, precision, scale) { _IsMapColumn = true; _currentParent = relationshipPath == null ? null : relationshipPath[0].Parent; _foreignColumn = foreignColumn; _relationshipPath = relationshipPath; ResetDefaults(); }
public FormColumn(Column column) { InitializeComponent(); BackColor = Slyce.Common.Colors.BackgroundColor; _parent = column.Parent; _column = column; ucHeading1.Text = ""; Interfaces.Events.ShadeMainForm(); }
public FormColumn(Column column) { InitializeComponent(); this.BackColor = Slyce.Common.Colors.BackgroundColor; _parent = column.Parent; _column = column; ucHeading1.Text = ""; Controller.ShadeMainForm(); }
public static Column[] GetEnabledColumns(Column[] columns) { List<Column> enabledColumns = new List<Column>(); foreach (Column column in columns) { if (column.Enabled) { enabledColumns.Add(column); } } return enabledColumns.ToArray(); }
public static int GetAliasCount(Column[] columns, string alias) { int count = 0; foreach (Column column in columns) { if (column.Alias == alias) { count++; } } return count; }
public Relationship(string name, bool isUserDefined, ScriptObject parent, ScriptObject primaryScriptObject, Column[] primaryColumns, ScriptObject foreignScriptObject, Column[] foreignColumns, Filter filter) : base(name, isUserDefined) { _parent = parent; _primaryScriptObject = primaryScriptObject; _primaryColumns.AddRange(primaryColumns); _foreignScriptObject = foreignScriptObject; _foreignColumns.AddRange(foreignColumns); _filter = filter; if (GetType() == typeof(Relationship)) { ResetDefaults(); } }
public static Column GetColumn(Column[] columns, string name, bool throwException) { foreach (Column column in columns) { if (column.Name == name) { return column; } } if (throwException) { throw new Exception("Cannot find column " + name); } return null; }
private static string GetColumnNameList(Column[] columns) { string columnList = ""; if (columns.Length > 1) { columnList += "("; } for (int i = 0; i < columns.Length; i++) { Column column = columns[i]; columnList += column.Name; if (i < columns.Length - 1) { columnList += ","; } } if (columns.Length > 1) { columnList += ")"; } return columnList; }
public void UpdateColumn(int index, Column column) { Interfaces.Events.RaiseDataChangedEvent(GetType(), (MethodInfo)MethodBase.GetCurrentMethod(), _columns[index], column); _columns[index] = column; }
public void RemoveColumn(Column column) { Interfaces.Events.RaiseDataChangedEvent(GetType(), (MethodInfo)MethodBase.GetCurrentMethod(), column, null); _columns.Remove(column); }
public void AddColumn(Column column) { Interfaces.Events.RaiseDataChangedEvent(GetType(), (MethodInfo)MethodBase.GetCurrentMethod(), null, column); _columns.Add(column); }
public static string GetKeyValues2(Column[] columns, bool includeDataType, string prefix) { string returnString = ""; for (int i = 0; i < columns.Length; i++) { Column column = columns[i]; if (includeDataType) returnString += CSharp.GetDataType(column) + " "; if (prefix == "_") { returnString += prefix + Script.GetCamelCase(column.Alias); } else { returnString += prefix + column.Alias; } if (i < columns.Length - 1) { returnString += ", "; } } return (returnString); }
public static Column[] GetUserDefinedColumns(Column[] columns) { List<Column> userDefinedColumns = new List<Column>(); foreach (Column column in columns) { if (column.IsUserDefined) { userDefinedColumns.Add(column); } } return userDefinedColumns.ToArray(); }
public void FillStoredProcedureColumns(Model.StoredProcedure storedProcedure) { string sql = string.Format("SET FMTONLY ON EXEC [{0}].[{1}] ", storedProcedure.Schema, storedProcedure.Name); for (int i = 0; i < storedProcedure.Parameters.Length; i++) { if (Providers.Database.Helper.SQLServer.IsDataTypeText(storedProcedure.Parameters[i].DataType)) { sql += "\"0\", "; } else { sql += "0, "; } } sql = sql.TrimEnd(EndChars); DataTable dataTable; try { dataTable = RunQueryDataTable(sql); } catch (Exception ex) { //ResetConnection(); sql = sql.Replace("SET FMTONLY ON", "SET FMTONLY OFF"); try { using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.RequiresNew)) { dataTable = RunQueryDataTable(sql); // We must ALWAYS rollback because we are executing stored procs with FMTONLY = OFF, so just don't call scope.Complete() } } catch { storedProcedure.Errors.Add(string.Format("Error getting returned columns: {0}. SQL: {1}", ex.Message, sql)); return; } } while (storedProcedure.Columns.Length > 0) { storedProcedure.RemoveColumn(storedProcedure.Columns[0]); } foreach (DataColumn dataColumn in dataTable.Columns) { Column column = new Column( dataColumn.ColumnName, false, storedProcedure, dataColumn.Ordinal, dataColumn.AllowDBNull, GetSqlDataType(dataColumn.DataType), 0, false, dataColumn.AutoIncrement, dataColumn.DefaultValue.ToString(), false, false, 0, 0); if (IsSupported(column)) { storedProcedure.AddColumn(column); } } }
public static string GetKeyValueStringWithClass(Column[] columns, string className) { return CSharp.GetKeyValues(columns, Script.GetCamelCase(className) + "."); }
public static Column GetColumn(Column[] columns, string name) { return GetColumn(columns, name, true); }
public static string GetKeyValues(Column[] columns, bool includeDataType, string prefix) { string returnString = ""; for (int i = 0; i < columns.Length; i++) { Column column = columns[i]; if (includeDataType) returnString += CSharp.GetDataType(column) + " "; returnString += prefix + column.Alias; if (i < columns.Length - 1) { returnString += ", "; } } return (returnString); }
public OneToManyRelationship(string name, bool isUserDefined, ScriptObject primaryScriptObject, Column[] primaryColumns, ScriptObject foreignScriptObject, Column[] foreignColumns, Filter filter) : base(name, isUserDefined, primaryScriptObject, primaryScriptObject, primaryColumns, foreignScriptObject, foreignColumns, filter) { ResetDefaults(); }
public static string GetKeyValueString(Column[] columns) { return CSharp.GetKeyValues(columns, false); }
private Model.Table GetNewTable(string tableName) { ArchAngel.Interfaces.Events.RaiseObjectBeingProcessedEvent(tableName, "Table"); //_columns = null; // Reset the columns //_indexes = null; //_dtReferencedColumns = null; //return new Model.Table(); Model.Table table = new Model.Table(tableName, false); #region Columns DataRow[] columnRows = Columns.Select(string.Format("TABLE_NAME = '{0}'", tableName)); foreach (DataRow row in columnRows) { bool isReadOnly = false; if (!row.IsNull("IsIdentity") && (int)row["IsIdentity"] == 1) { isReadOnly = true; } else if (!row.IsNull("IsComputed") && (int)row["IsComputed"] == 1) { isReadOnly = true; } else if (Slyce.Common.Utility.StringsAreEqual((string)row["DATA_TYPE"], "timestamp", false)) { isReadOnly = true; } // Check whether we have added this column before. Columns are repeated if they are both a PRIMARY_KEY and a FOREIGN_KEY Column column = new Column( (string)row["COLUMN_NAME"], false, table, (int)row["ORDINAL_POSITION"], Slyce.Common.Utility.StringsAreEqual((string)row["IS_NULLABLE"], "YES", false), (string)row["DATA_TYPE"], row.IsNull("CHARACTER_MAXIMUM_LENGTH") ? 0 : Convert.ToInt32(row["CHARACTER_MAXIMUM_LENGTH"]), (int)row["InPrimaryKey"] == 1, row.IsNull("IsIdentity") ? false : Convert.ToInt32(row["IsIdentity"]) == 1, row.IsNull("COLUMN_DEFAULT") ? "" : (string)row["COLUMN_DEFAULT"], isReadOnly, row.IsNull("IsComputed") ? false : Convert.ToInt32(row["IsComputed"]) == 1, row.IsNull("NUMERIC_PRECISION") ? 0 : Convert.ToInt32(row["NUMERIC_PRECISION"]), row.IsNull("NUMERIC_SCALE") ? 0 : Convert.ToInt32(row["NUMERIC_SCALE"])); table.AddColumn(column); //ordinalPosition++; } #endregion #region Indexes DataRow[] indexRows = Indexes.Select(string.Format("TABLE_NAME = '{0}'", tableName)); foreach (DataRow indexRow in indexRows) { string indexType; string indexKeyType = indexRow["CONSTRAINT_TYPE"].ToString(); if (indexKeyType == "PRIMARY KEY") { continue; } else if (indexKeyType == "FOREIGN KEY") { continue; } else if (indexKeyType == "UNIQUE") { continue; //indexType = DatabaseConstant.IndexType.Unique; } else if (indexKeyType == "CHECK") { indexType = DatabaseConstant.IndexType.Check; } else if (indexKeyType == "NONE") //TODO check is NONE { indexType = DatabaseConstant.IndexType.None; } else { //continue; throw new Exception("IndexType " + indexKeyType + " Not Defined"); } DataRow[] indexColumnRows;// = IndexColumns.Select(string.Format("TABLE_NAME = '{0}' AND CONSTRAINT_NAME = '{1}'", tableName, indexRow["CONSTRAINT_NAME"])); if (indexKeyType == "NONE") { indexColumnRows = Columns.Select(string.Format("TABLE_NAME = '{0}' AND COLUMN_NAME = '{1}'", tableName, indexRow["ColumnName"])); } else { indexColumnRows = IndexColumns.Select(string.Format("TABLE_NAME = '{0}' AND CONSTRAINT_NAME = '{1}'", tableName, indexRow["CONSTRAINT_NAME"])); } Index index = new Index(indexRow["CONSTRAINT_NAME"].ToString(), false, indexType, table, (bool)indexRow["IS_UNIQUE"], (bool)indexRow["IS_CLUSTERED"]); // Fill Columns foreach (DataRow indexColumnRow in indexColumnRows) { Column indexColumn = new Column(indexColumnRow["COLUMN_NAME"].ToString(), false); index.AddColumn(indexColumn); } index.ResetDefaults(); table.AddIndex(index); } // Indexes -- that should be keys foreach (DataRow keyRow in indexRows) { string keyType; string indexKeyType = keyRow["CONSTRAINT_TYPE"].ToString(); if (indexKeyType == "PRIMARY KEY") { keyType = DatabaseConstant.KeyType.Primary; } else if (indexKeyType == "FOREIGN KEY") { keyType = DatabaseConstant.KeyType.Foreign; } else if (indexKeyType == "UNIQUE") { keyType = DatabaseConstant.KeyType.Unique; } else if (indexKeyType == "CHECK") { continue; } else if (indexKeyType == "NONE") { continue; //keyType = DatabaseConstant.KeyType.None; } else { //continue; throw new Exception("KeyType " + indexKeyType + " Not Defined"); } Key key = new Key(keyRow["CONSTRAINT_NAME"].ToString(), false, keyType, table, false); DataRow[] keyColumnRows = IndexColumns.Select(string.Format("TABLE_NAME = '{0}' AND CONSTRAINT_NAME = '{1}'", tableName, keyRow["CONSTRAINT_NAME"])); // Fill Columns foreach (DataRow keyColumnRow in keyColumnRows) { Column keyColumn = new Column(keyColumnRow["COLUMN_NAME"].ToString(), false); keyColumn.DataType = (string)keyColumnRow["DATA_TYPE"]; key.AddColumn(keyColumn); } if (keyType == DatabaseConstant.KeyType.Foreign) { DataRow[] keyReferencedColumnRows = IndexReferencedColumns.Select(string.Format("ForeignKey = '{0}'", keyRow["CONSTRAINT_NAME"])); DataRow firstKeyReferencedColumnRow = keyReferencedColumnRows[0]; // Fill References key.ReferencedTable = new Model.Table(firstKeyReferencedColumnRow["ReferencedTable"].ToString(), false); //if (dmoKey.ReferencedKey != null) //{ key.ReferencedKey = new Key(firstKeyReferencedColumnRow["ReferencedKey"].ToString(), false, true); //} // Fill Referenced Columns foreach (DataRow keyReferencedColumnRow in keyReferencedColumnRows) { Column keyReferencedColumn = new Column(keyReferencedColumnRow["ReferencedColumn"].ToString(), false); key.AddReferencedColumn(keyReferencedColumn); } } key.ResetDefaults(); table.AddKey(key); } #endregion //#region Indexes -- that should be keys //string prevConstraintName = ""; //Key key = null; //DataRow[] indexRows = DtIndexes.Select(string.Format("TABLE_NAME = '{0}'", tableName)); //for (int rowCounter = 0; rowCounter < indexRows.Length; rowCounter++) //{ // DataRow row = indexRows[rowCounter]; // for (int colCounter = 0; colCounter < DtIndexes.Columns.Count; colCounter++) // { // string colName = DtIndexes.Columns[colCounter].ColumnName; // } // string keyType; // string indexKeyType = row.IsNull("Constraint_Type") ? "NONE" : (string)row["Constraint_Type"]; // string constraintName = row.IsNull("Constraint_Name") ? "" : (string)row["Constraint_Name"]; // string columnName = (string)row["COLUMN_NAME"]; // if (indexKeyType == "NONE") // { // keyType = DatabaseConstant.KeyType.None; // } // else if (indexKeyType == "PRIMARY KEY") // { // keyType = DatabaseConstant.KeyType.Primary; // } // else if (indexKeyType == "UNIQUE") // { // keyType = DatabaseConstant.KeyType.Unique; // } // else if (indexKeyType == "CHECK") // TODO: was 'None' for SMO // { // keyType = DatabaseConstant.KeyType.None; // } // else if (indexKeyType == "FOREIGN KEY") // TODO: was 'None' for SMO // { // keyType = DatabaseConstant.KeyType.Foreign; // } // else // { // throw new Exception("KeyType " + indexKeyType + " Not Defined"); // } // // Create Alias // if (string.Format("{0}{1}", constraintName, keyType) != prevConstraintName) // { // if (key != null) // { // // Reset the alias, because it is based on the Columns collection which has just finished being modified. // key.ResetDefaults(); // } // // Create a new Key // key = new Key(constraintName, false, keyType, table, false); // table.AddKey(key); // prevConstraintName = string.Format("{0}{1}", constraintName, keyType); // Column keyColumn = new Column(columnName, false); // key.AddColumn(keyColumn); // } // else // { // // We are processing another column of the same Index as the previous index // Column keyColumn = new Column(columnName, false); // key.AddColumn(keyColumn); // } // if (keyType == DatabaseConstant.KeyType.Foreign) // { // DataRow[] referencedColumnRows = DtReferencedColumns.Select(string.Format("FOREIGN_KEY = '{0}'", key.Name)); // foreach (DataRow refColRow in referencedColumnRows) // { // // Fill References // if (key.ReferencedTable == null) // { // string referencedTableName = (string)refColRow["Referenced_Table_Name"]; // string referencedKeyName = (string)refColRow["Referenced_Key"]; // key.ReferencedTable = new Model.Table(referencedTableName, false); // key.ReferencedKey = new Key(referencedKeyName, false, true); // } // string referencedColumnName = (string)refColRow["Referenced_Column_Name"]; // // Fill Referenced Columns // Column referencedKeyColumn = new Column(referencedColumnName, false); // key.AddReferencedColumn(referencedKeyColumn); // } // } // key.ResetDefaults(); //} //#endregion return table; }
private Model.View GetNewView(string viewName) { ArchAngel.Interfaces.Events.RaiseObjectBeingProcessedEvent(viewName, "View"); //_dtColumns = null; Model.View view = new Model.View(viewName, false); // Columns DataRow[] columnRows = DtColumns.Select(string.Format("TABLE_NAME = '{0}'", viewName)); foreach (DataRow row in columnRows) { bool isReadOnly = false; if (!row.IsNull("IsIdentity") && (int)row["IsIdentity"] == 1) { isReadOnly = true; } else if (!row.IsNull("IsComputed") && (int)row["IsComputed"] == 1) { isReadOnly = true; } else if (Slyce.Common.Utility.StringsAreEqual((string)row["DATA_TYPE"], "timestamp", false)) { isReadOnly = true; } // Check whether we have added this column before. Columns are repeated if they are both a PRIMARY_KEY and a FOREIGN_KEY ArchAngel.Providers.Database.Model.Column column = new ArchAngel.Providers.Database.Model.Column( (string)row["COLUMN_NAME"], false, view, (int)row["ORDINAL_POSITION"], Slyce.Common.Utility.StringsAreEqual((string)row["IS_NULLABLE"], "YES", false), (string)row["DATA_TYPE"], row.IsNull("CHARACTER_MAXIMUM_LENGTH") ? 0 : Convert.ToInt32(row["CHARACTER_MAXIMUM_LENGTH"]), (int)row["InPrimaryKey"] == 1, row.IsNull("IsIdentity") ? false : Convert.ToInt32(row["IsIdentity"]) == 1, row.IsNull("COLUMN_DEFAULT") ? "" : (string)row["COLUMN_DEFAULT"], isReadOnly, row.IsNull("IsComputed") ? false : Convert.ToInt32(row["IsComputed"]) == 1, row.IsNull("NUMERIC_PRECISION") ? 0 : Convert.ToInt32(row["NUMERIC_PRECISION"]), row.IsNull("NUMERIC_SCALE") ? 0 : Convert.ToInt32(row["NUMERIC_SCALE"])); view.AddColumn(column); } //smoColumns.Sort(new SortComparer<Microsoft.SqlServer.Management.Smo.Column>("ID", System.ComponentModel.ListSortDirection.Ascending)); //foreach (Microsoft.SqlServer.Management.Smo.Column smoColumn in smoColumns) //{ // if (UnsupportedDataTypes.ToLower().IndexOf("'" + smoColumn.DataType.Name.ToLower() + "'") >= 0) // { // continue; // } // Model.Column column = new Model.Column(smoColumn.Name, Script.GetSingular(smoColumn.Name), false, smoColumn.Name, view, ordinalPosition, smoColumn.Nullable, smoColumn.DataType.Name, smoColumn.DataType.MaximumLength, // false, smoColumn.Identity, smoColumn.Default, true); // view.AddColumn(column); // ordinalPosition++; //} return(view); }
/// <summary> /// Lookup for MapColumns - need to compare Alias as well, because multiple MapColumns can link to a single foreign table. /// </summary> /// <param name="columns"></param> /// <param name="name"></param> /// <param name="alias"></param> /// <returns></returns> public static Column GetColumn(Column[] columns, string name, string alias) { return GetColumn(columns, name, alias, true); }
public static string GetKeyValueStringWithUnderscore(Column[] columns) { return CSharp.GetKeyValues2(columns, false, "_"); }
public static string GetKeyValueStringWithDataType(Column[] columns) { return CSharp.GetKeyValues(columns, true); }