protected override void LoadIndexes() { if (!m_members.TableMembers.Contains(TableStructureMembers.Indexes)) { return; } var data = m_conn.SystemConnection.LoadTableFromQuery("select * from pg_indexes where schemaname!='pg_catalog'"); foreach (DataRow row in data.Rows) { string sql = row["indexdef"].SafeToString(); PostgreSQLLexer lexer = new PostgreSQLLexer(new ANTLRReaderStream(new StringReader(sql))); CommonTokenStream tokens = new CommonTokenStream(lexer); PostgreSQLParser parser = new PostgreSQLParser(tokens); IndexConstraint index = new IndexConstraint(); parser.create_index(index); if (parser.Errors != null) { throw new PostgreSqlParseCreateIndexError(parser.Errors, sql); } if (index.TableName.Schema == null) { index.SetDummyTable(new NameWithSchema("public", index.TableName.Name)); } if (!m_loadedIndexes.ContainsKey(index.TableName)) { m_loadedIndexes[index.TableName] = new List <IndexConstraint>(); } m_loadedIndexes[index.TableName].Add(index); } base.LoadIndexes(); }
public static void ObjectIsValid(IndexConstraint obj, ObjectIsValidEventArgs e) { if (obj.Properties.Count == 0) { e.Errors.Add("Cannot have index without Properties."); } }
public void AddIndexConstraint(string indexName, string columns, string indexType) { IndexConstraint ic = new IndexConstraint(); ic.Name = indexName; ic.TargetColumns = columns; ic.IndexType = indexType; IndexCons.Add(ic); }
public static void ObjectIsValid(IndexConstraint obj, ObjectIsValidEventArgs e) { if (obj.Properties.Count == 0) { e.IsValid = false; e.Errors.Add("Cannot have index without Properties."); } }
public void OccurenceAndOrWithOrTrue() { var findBy = new IndexConstraint(2).And(Find.ByName("Y")).Or(Find.ByName("Z")); var mockAttributeBag = new MockAttributeBag("name", "Z"); ConstraintContext context = new ConstraintContext(); Assert.IsTrue(findBy.Matches(mockAttributeBag, context)); }
public void Occurence0() { Constraint findBy = new IndexConstraint(0); var mockAttributeBag = new MockAttributeBag("name", "Z"); ConstraintContext context = new ConstraintContext(); Assert.IsTrue(findBy.Matches(mockAttributeBag, context)); Assert.IsFalse(findBy.Matches(mockAttributeBag, context)); }
public void GetIndexesConstraintsForTableShouldBe() { var expectedIndexes = new IndexConstraint[] { new IndexConstraint("RESULTS", null, "sqlite_autoindex_RESULTS_1", true, new string[] { "RESULT_ID" }, true), new IndexConstraint("RESULTS", null, "RESULT_DAY_INDEX", false, new string[] { "DAY_ID" }, false), new IndexConstraint("RESULTS", null, "RESULT_GOALS_INDEX", false, new string[] { "GOALS_HOME_TEAM", "GOALS_VISITOR_TEAM" }, false) }.OrderBy(x => x.ConstraintName).ToArray(); CreateIndexes().Wait(); GetIndexesConstraintsForTableShouldBeCore(expectedIndexes, "RESULTS"); }
public bool IsNewIndexConstraint(IndexConstraint uc) { var isFulltextConstraint = uc is FullTextIndexConstraint; return !isFulltextConstraint && uc.Constrained is ObjectClass && savedSchema.FindPersistenceObject<IndexConstraint>(uc.ExportGuid) == null; }
public void DoNewIndexConstraint(IndexConstraint uc) { var objClass = (ObjectClass)uc.Constrained; var tblName = db.GetTableName(objClass.Module.SchemaName, objClass.TableName); var columns = GetUCColNames(uc); Log.InfoFormat("New Index Constraint: {0} on {1}({2})", uc.Reason, tblName, string.Join(", ", columns)); if (db.CheckIndexPossible(tblName, Construct.IndexName(objClass.TableName, columns), uc.IsUnique, false, columns)) db.CreateIndex(tblName, Construct.IndexName(objClass.TableName, columns), uc.IsUnique, false, columns); else Log.WarnFormat("Cannot create Index Constraint: {0} on {1}({2})", uc.Reason, tblName, string.Join(", ", columns)); }
private void WriteIndexConstraint(IndexConstraint c) { _fsSql.WriteLine(" {0}Index {1} ({2}){3}", String.IsNullOrEmpty(c.IndexType) ? "" : c.IndexType + " ", c.Name, c.TargetColumns, FKcons.Count == 0 ? String.Empty : ","); }
private void WriteIndexConstraint(IndexConstraint c, string tableName) { if (FKcons.Count != 0) { _fsSql.WriteLine(""); _fsSql.WriteLine("DROP INDEX IF EXISTS {0};", c.Name); _fsSql.WriteLine(""); _fsSql.WriteLine("CREATE {0}INDEX {1} on {2}_Base ({3});", String.IsNullOrEmpty(c.IndexType) ? "" : c.IndexType + " ", c.Name, tableName, c.TargetColumns); } }
public bool IsChangeIndexConstraint(IndexConstraint uc) { var isFulltextConstraint = uc is FullTextIndexConstraint; if (isFulltextConstraint) return false; var saved = savedSchema.FindPersistenceObject<IndexConstraint>(uc.ExportGuid); if (saved == null) return false; if (uc.IsUnique != saved.IsUnique) return true; var newCols = Construct.GetUCColNames(uc); var savedCols = Construct.GetUCColNames(saved); if (newCols.Length != savedCols.Length) return true; foreach (var c in newCols) { if (!savedCols.Contains(c)) return true; } var objClass = (ObjectClass)uc.Constrained; var savedObjClass = (ObjectClass)saved.Constrained; if (Construct.IndexName(savedObjClass.TableName, savedCols) != Construct.IndexName(objClass.TableName, newCols)) return true; return false; }
public static void NotifyDeleting(IndexConstraint obj) { obj.Properties.Clear(); }
public static void NotifyDeleting(IndexConstraint obj) { obj.Properties.Clear(); }
// $ANTLR start "index_column" // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:24:1: index_column[IndexConstraint index] : name= id (opsclass= id )? ; public PostgreSQLParser.index_column_return index_column(IndexConstraint index) // throws RecognitionException [1] { PostgreSQLParser.index_column_return retval = new PostgreSQLParser.index_column_return(); retval.Start = input.LT(1); object root_0 = null; PostgreSQLParser.id_return name = default(PostgreSQLParser.id_return); PostgreSQLParser.id_return opsclass = default(PostgreSQLParser.id_return); try { // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:24:36: (name= id (opsclass= id )? ) // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:25:5: name= id (opsclass= id )? { root_0 = (object)adaptor.GetNilNode(); PushFollow(FOLLOW_id_in_index_column127); name = id(); state.followingStackPointer--; adaptor.AddChild(root_0, name.Tree); index.Columns.Add(new ColumnReference(UnquoteName(((name != null) ? input.ToString((IToken)(name.Start), (IToken)(name.Stop)) : null)))); // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:26:13: (opsclass= id )? int alt5 = 2; int LA5_0 = input.LA(1); if (((LA5_0 >= T_IDENT && LA5_0 <= T_QUOTED_IDENT))) { alt5 = 1; } switch (alt5) { case 1: // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:26:13: opsclass= id { PushFollow(FOLLOW_id_in_index_column137); opsclass = id(); state.followingStackPointer--; adaptor.AddChild(root_0, opsclass.Tree); } break; } } retval.Stop = input.LT(-1); retval.Tree = (object)adaptor.RulePostProcessing(root_0); adaptor.SetTokenBoundaries(retval.Tree, (IToken)retval.Start, (IToken)retval.Stop); } catch (RecognitionException re) { ReportError(re); Recover(input, re); // Conversion of the second argument necessary, but harmless retval.Tree = (object)adaptor.ErrorNode(input, (IToken)retval.Start, input.LT(-1), re); } finally { } return(retval); }
private void WriteInlineIndexConstraint(IndexConstraint c) { _consWritten += 1; _fsSql.WriteLine(" {0}Index {1} ({2}){3}", String.IsNullOrEmpty(c.IndexType) ? "" : c.IndexType + " ", c.Name, c.TargetColumns, _consWritten == _numCons ? String.Empty : ","); }
public static void GetErrorText(IndexConstraint obj, MethodReturnEventArgs<string> e, IDataObject constrainedObject) { e.Result = ""; }
public void DoChangeIndexConstraint(IndexConstraint uc) { var saved = savedSchema.FindPersistenceObject<IndexConstraint>(uc.ExportGuid); DoDeleteIndexConstraint(saved); DoNewIndexConstraint(uc); }
public static void GetErrorText(IndexConstraint obj, MethodReturnEventArgs <string> e, IDataObject constrainedObject) { e.Result = ""; }
public static void IsValid(IndexConstraint obj, MethodReturnEventArgs <bool> e, IDataObject constrainedObject) { e.Result = true; // enforced by database }
public static void IsValid(IndexConstraint obj, MethodReturnEventArgs<bool> e, IDataObject constrainedObject) { e.Result = true; // enforced by database }
public bool IsChangeIndexConstraint(IndexConstraint uc) { if (!(uc is IndexConstraint)) return false; var saved = savedSchema.FindPersistenceObject<IndexConstraint>(uc.ExportGuid); if (saved == null) return false; if (uc.IsUnique != saved.IsUnique) return true; var newCols = GetUCColNames(uc); var savedCols = GetUCColNames(saved); if (newCols.Length != savedCols.Length) return true; foreach (var c in newCols) { if (!savedCols.Contains(c)) return true; } return false; }
public static string[] GetUCColNames(IndexConstraint uc) { if (uc == null) throw new ArgumentNullException("uc"); var vt_columns = uc.Properties.OfType<ValueTypeProperty>().Select(p => Construct.ColumnName(p, null)).ToArray(); var columns = vt_columns.Union(uc.Properties.OfType<ObjectReferenceProperty>().Select(p => Construct.ForeignKeyColumnName(p.RelationEnd.Parent.GetOtherEnd(p.RelationEnd)))).OrderBy(n => n).ToArray(); return columns; }
public bool IsNewIndexConstraint(IndexConstraint uc) { return uc.Constrained is ObjectClass && savedSchema.FindPersistenceObject<IndexConstraint>(uc.ExportGuid) == null; }
// $ANTLR start "create_index" // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:14:1: create_index[IndexConstraint index] : CREATE ( UNIQUE )? INDEX ( CONCURRENTLY )? name= index_name ON table_name ( USING id )? LPAREN index_column[index] ( COMMA index_column[index] )* RPAREN ; public PostgreSQLParser.create_index_return create_index(IndexConstraint index) // throws RecognitionException [1] { PostgreSQLParser.create_index_return retval = new PostgreSQLParser.create_index_return(); retval.Start = input.LT(1); object root_0 = null; IToken CREATE1 = null; IToken UNIQUE2 = null; IToken INDEX3 = null; IToken CONCURRENTLY4 = null; IToken ON5 = null; IToken USING7 = null; IToken LPAREN9 = null; IToken COMMA11 = null; IToken RPAREN13 = null; PostgreSQLParser.index_name_return name = default(PostgreSQLParser.index_name_return); PostgreSQLParser.table_name_return table_name6 = default(PostgreSQLParser.table_name_return); PostgreSQLParser.id_return id8 = default(PostgreSQLParser.id_return); PostgreSQLParser.index_column_return index_column10 = default(PostgreSQLParser.index_column_return); PostgreSQLParser.index_column_return index_column12 = default(PostgreSQLParser.index_column_return); object CREATE1_tree = null; object UNIQUE2_tree = null; object INDEX3_tree = null; object CONCURRENTLY4_tree = null; object ON5_tree = null; object USING7_tree = null; object LPAREN9_tree = null; object COMMA11_tree = null; object RPAREN13_tree = null; try { // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:14:36: ( CREATE ( UNIQUE )? INDEX ( CONCURRENTLY )? name= index_name ON table_name ( USING id )? LPAREN index_column[index] ( COMMA index_column[index] )* RPAREN ) // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:15:5: CREATE ( UNIQUE )? INDEX ( CONCURRENTLY )? name= index_name ON table_name ( USING id )? LPAREN index_column[index] ( COMMA index_column[index] )* RPAREN { root_0 = (object)adaptor.GetNilNode(); CREATE1 = (IToken)Match(input, CREATE, FOLLOW_CREATE_in_create_index37); CREATE1_tree = (object)adaptor.Create(CREATE1); adaptor.AddChild(root_0, CREATE1_tree); // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:16:5: ( UNIQUE )? int alt1 = 2; int LA1_0 = input.LA(1); if ((LA1_0 == UNIQUE)) { alt1 = 1; } switch (alt1) { case 1: // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:16:6: UNIQUE { UNIQUE2 = (IToken)Match(input, UNIQUE, FOLLOW_UNIQUE_in_create_index44); UNIQUE2_tree = (object)adaptor.Create(UNIQUE2); adaptor.AddChild(root_0, UNIQUE2_tree); index.IsUnique = true; } break; } INDEX3 = (IToken)Match(input, INDEX, FOLLOW_INDEX_in_create_index54); INDEX3_tree = (object)adaptor.Create(INDEX3); adaptor.AddChild(root_0, INDEX3_tree); // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:18:5: ( CONCURRENTLY )? int alt2 = 2; int LA2_0 = input.LA(1); if ((LA2_0 == CONCURRENTLY)) { alt2 = 1; } switch (alt2) { case 1: // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:18:5: CONCURRENTLY { CONCURRENTLY4 = (IToken)Match(input, CONCURRENTLY, FOLLOW_CONCURRENTLY_in_create_index60); CONCURRENTLY4_tree = (object)adaptor.Create(CONCURRENTLY4); adaptor.AddChild(root_0, CONCURRENTLY4_tree); } break; } PushFollow(FOLLOW_index_name_in_create_index70); name = index_name(); state.followingStackPointer--; adaptor.AddChild(root_0, name.Tree); index.Name = UnquoteName(((name != null) ? input.ToString((IToken)(name.Start), (IToken)(name.Stop)) : null)); ON5 = (IToken)Match(input, ON, FOLLOW_ON_in_create_index79); ON5_tree = (object)adaptor.Create(ON5); adaptor.AddChild(root_0, ON5_tree); PushFollow(FOLLOW_table_name_in_create_index81); table_name6 = table_name(); state.followingStackPointer--; adaptor.AddChild(root_0, table_name6.Tree); index.SetDummyTable(((table_name6 != null) ? table_name6.result : default(NameWithSchema))); // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:21:5: ( USING id )? int alt3 = 2; int LA3_0 = input.LA(1); if ((LA3_0 == USING)) { alt3 = 1; } switch (alt3) { case 1: // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:21:6: USING id { USING7 = (IToken)Match(input, USING, FOLLOW_USING_in_create_index90); USING7_tree = (object)adaptor.Create(USING7); adaptor.AddChild(root_0, USING7_tree); PushFollow(FOLLOW_id_in_create_index92); id8 = id(); state.followingStackPointer--; adaptor.AddChild(root_0, id8.Tree); } break; } LPAREN9 = (IToken)Match(input, LPAREN, FOLLOW_LPAREN_in_create_index100); LPAREN9_tree = (object)adaptor.Create(LPAREN9); adaptor.AddChild(root_0, LPAREN9_tree); PushFollow(FOLLOW_index_column_in_create_index102); index_column10 = index_column(index); state.followingStackPointer--; adaptor.AddChild(root_0, index_column10.Tree); // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:22:32: ( COMMA index_column[index] )* do { int alt4 = 2; int LA4_0 = input.LA(1); if ((LA4_0 == COMMA)) { alt4 = 1; } switch (alt4) { case 1: // ..\\Plugin.postgre\\AntlrParser\\PostgreSQL.g:22:33: COMMA index_column[index] { COMMA11 = (IToken)Match(input, COMMA, FOLLOW_COMMA_in_create_index106); COMMA11_tree = (object)adaptor.Create(COMMA11); adaptor.AddChild(root_0, COMMA11_tree); PushFollow(FOLLOW_index_column_in_create_index108); index_column12 = index_column(index); state.followingStackPointer--; adaptor.AddChild(root_0, index_column12.Tree); } break; default: goto loop4; } } while (true); loop4: ; // Stops C# compiler whining that label 'loop4' has no statements RPAREN13 = (IToken)Match(input, RPAREN, FOLLOW_RPAREN_in_create_index113); RPAREN13_tree = (object)adaptor.Create(RPAREN13); adaptor.AddChild(root_0, RPAREN13_tree); } retval.Stop = input.LT(-1); retval.Tree = (object)adaptor.RulePostProcessing(root_0); adaptor.SetTokenBoundaries(retval.Tree, (IToken)retval.Start, (IToken)retval.Stop); } catch (RecognitionException re) { ReportError(re); Recover(input, re); // Conversion of the second argument necessary, but harmless retval.Tree = (object)adaptor.ErrorNode(input, (IToken)retval.Start, input.LT(-1), re); } finally { } return(retval); }
internal static string[] GetUCColNames(IndexConstraint uc) { var vt_columns = uc.Properties.OfType<ValueTypeProperty>().Select(p => Construct.NestedColumnName(p, null)).ToArray(); var columns = vt_columns.Union(uc.Properties.OfType<ObjectReferenceProperty>().Select(p => Construct.ForeignKeyColumnName(p.RelationEnd.Parent.GetOtherEnd(p.RelationEnd)))).OrderBy(n => n).ToArray(); return columns; }
public void DoDeleteIndexConstraint(IndexConstraint uc) { var objClass = (ObjectClass)uc.Constrained; var tblName = db.GetTableName(objClass.Module.SchemaName, objClass.TableName); var columns = GetUCColNames(uc); if (db.CheckIndexExists(tblName, Construct.IndexName(objClass.TableName, columns))) { Log.InfoFormat("Drop Index Constraint: {0} on {1}({2})", uc.Reason, objClass.TableName, string.Join(", ", columns)); if (db.CheckIndexExists(tblName, Construct.IndexName(objClass.TableName, columns))) db.DropIndex(tblName, Construct.IndexName(objClass.TableName, columns)); } }
public void DoNewIndexConstraint(IndexConstraint uc) { var objClass = (ObjectClass)uc.Constrained; var tblName = objClass.GetTableRef(db); var columns = Construct.GetUCColNames(uc); var log_idxName = string.Format("{0} on {1}({2})", uc.Reason, tblName, string.Join(", ", columns)); Log.InfoFormat("New Index Constraint: {0}", log_idxName); var idxName = Construct.IndexName(objClass.TableName, columns); if (db.CheckIndexExists(tblName, idxName)) { Log.WarnFormat("Cannot create Index Constraint, it already exists: {0}", log_idxName); } else if (db.CheckIndexPossible(tblName, idxName, uc.IsUnique, false, columns)) { db.CreateIndex(tblName, idxName, uc.IsUnique, false, columns); } else { Log.WarnFormat("Cannot create Index Constraint, if a unique index should be created, the column(s) may contain non unique data: {0}", log_idxName); } }