⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tab-complete.c

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 C
📖 第 1 页 / 共 5 页
字号:
			  pg_strcasecmp(prev2_wd, "COLUMN") == 0) ||			 (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&			  pg_strcasecmp(prev2_wd, "ALTER") == 0))	{		/* DROP ... does not work well yet */		static const char *const list_COLUMNALTER[] =		{"TYPE", "SET DEFAULT", "DROP DEFAULT", "SET NOT NULL",		"DROP NOT NULL", "SET STATISTICS", "SET STORAGE", NULL};		COMPLETE_WITH_LIST(list_COLUMNALTER);	}	else if (pg_strcasecmp(prev3_wd, "TABLE") == 0 &&			 pg_strcasecmp(prev_wd, "CLUSTER") == 0)		COMPLETE_WITH_CONST("ON");	else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&			 pg_strcasecmp(prev2_wd, "CLUSTER") == 0 &&			 pg_strcasecmp(prev_wd, "ON") == 0)	{		completion_info_charp = prev3_wd;		COMPLETE_WITH_QUERY(Query_for_index_of_table);	}	/* If we have TABLE <sth> SET, provide WITHOUT,TABLESPACE and SCHEMA */	else if (pg_strcasecmp(prev3_wd, "TABLE") == 0 &&			 pg_strcasecmp(prev_wd, "SET") == 0)	{		static const char *const list_TABLESET[] =		{"WITHOUT", "TABLESPACE", "SCHEMA", NULL};		COMPLETE_WITH_LIST(list_TABLESET);	}	/* If we have TABLE <sth> SET TABLESPACE provide a list of tablespaces */	else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&			 pg_strcasecmp(prev2_wd, "SET") == 0 &&			 pg_strcasecmp(prev_wd, "TABLESPACE") == 0)		COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);	/* If we have TABLE <sth> SET WITHOUT provide CLUSTER or OIDS */	else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&			 pg_strcasecmp(prev2_wd, "SET") == 0 &&			 pg_strcasecmp(prev_wd, "WITHOUT") == 0)	{		static const char *const list_TABLESET2[] =		{"CLUSTER", "OIDS", NULL};		COMPLETE_WITH_LIST(list_TABLESET2);	}	/* we have ALTER TABLESPACE, so suggest RENAME TO, OWNER TO */	else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&			 pg_strcasecmp(prev2_wd, "TABLESPACE") == 0)	{		static const char *const list_ALTERTSPC[] =		{"RENAME TO", "OWNER TO", NULL};		COMPLETE_WITH_LIST(list_ALTERTSPC);	}	/* complete ALTER TYPE <foo> with OWNER TO, SET SCHEMA */	else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&			 pg_strcasecmp(prev2_wd, "TYPE") == 0)	{		static const char *const list_ALTERTYPE[] =		{"OWNER TO", "SET SCHEMA", NULL};		COMPLETE_WITH_LIST(list_ALTERTYPE);	}	/* complete ALTER GROUP <foo> */	else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&			 pg_strcasecmp(prev2_wd, "GROUP") == 0)	{		static const char *const list_ALTERGROUP[] =		{"ADD USER", "DROP USER", "RENAME TO", NULL};		COMPLETE_WITH_LIST(list_ALTERGROUP);	}	/* complete ALTER GROUP <foo> ADD|DROP with USER */	else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 &&			 pg_strcasecmp(prev3_wd, "GROUP") == 0 &&			 (pg_strcasecmp(prev_wd, "ADD") == 0 ||			  pg_strcasecmp(prev_wd, "DROP") == 0))		COMPLETE_WITH_CONST("USER");	/* complete {ALTER} GROUP <foo> ADD|DROP USER with a user name */	else if (pg_strcasecmp(prev4_wd, "GROUP") == 0 &&			 (pg_strcasecmp(prev2_wd, "ADD") == 0 ||			  pg_strcasecmp(prev2_wd, "DROP") == 0) &&			 pg_strcasecmp(prev_wd, "USER") == 0)		COMPLETE_WITH_QUERY(Query_for_list_of_roles);/* BEGIN, END, ABORT */	else if (pg_strcasecmp(prev_wd, "BEGIN") == 0 ||			 pg_strcasecmp(prev_wd, "END") == 0 ||			 pg_strcasecmp(prev_wd, "ABORT") == 0)	{		static const char *const list_TRANS[] =		{"WORK", "TRANSACTION", NULL};		COMPLETE_WITH_LIST(list_TRANS);	}/* COMMIT */	else if (pg_strcasecmp(prev_wd, "COMMIT") == 0)	{		static const char *const list_COMMIT[] =		{"WORK", "TRANSACTION", "PREPARED", NULL};		COMPLETE_WITH_LIST(list_COMMIT);	}/* RELEASE SAVEPOINT */	else if (pg_strcasecmp(prev_wd, "RELEASE") == 0)		COMPLETE_WITH_CONST("SAVEPOINT");/* ROLLBACK*/	else if (pg_strcasecmp(prev_wd, "ROLLBACK") == 0)	{		static const char *const list_TRANS[] =		{"WORK", "TRANSACTION", "TO SAVEPOINT", "PREPARED", NULL};		COMPLETE_WITH_LIST(list_TRANS);	}/* CLUSTER */	/*	 * If the previous word is CLUSTER and not without produce list of	 * indexes.	 */	else if (pg_strcasecmp(prev_wd, "CLUSTER") == 0 &&			 pg_strcasecmp(prev2_wd, "WITHOUT") != 0)		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, NULL);	/* If we have CLUSTER <sth>, then add "ON" */	else if (pg_strcasecmp(prev2_wd, "CLUSTER") == 0 &&			 pg_strcasecmp(prev_wd, "ON") != 0)		COMPLETE_WITH_CONST("ON");	/*	 * If we have CLUSTER <sth> ON, then add the correct tablename as well.	 */	else if (pg_strcasecmp(prev3_wd, "CLUSTER") == 0 &&			 pg_strcasecmp(prev_wd, "ON") == 0)	{		completion_info_charp = prev2_wd;		COMPLETE_WITH_QUERY(Query_for_table_owning_index);	}/* COMMENT */	else if (pg_strcasecmp(prev_wd, "COMMENT") == 0)		COMPLETE_WITH_CONST("ON");	else if (pg_strcasecmp(prev2_wd, "COMMENT") == 0 &&			 pg_strcasecmp(prev_wd, "ON") == 0)	{		static const char *const list_COMMENT[] =		{"CAST", "CONVERSION", "DATABASE", "INDEX", "LANGUAGE", "RULE", "SCHEMA",			"SEQUENCE", "TABLE", "TYPE", "VIEW", "COLUMN", "AGGREGATE", "FUNCTION",		"OPERATOR", "TRIGGER", "CONSTRAINT", "DOMAIN", "LARGE OBJECT", NULL};		COMPLETE_WITH_LIST(list_COMMENT);	}	else if (pg_strcasecmp(prev4_wd, "COMMENT") == 0 &&			 pg_strcasecmp(prev3_wd, "ON") == 0)		COMPLETE_WITH_CONST("IS");/* COPY */	/*	 * If we have COPY [BINARY] (which you'd have to type yourself), offer	 * list of tables (Also cover the analogous backslash command)	 */	else if (pg_strcasecmp(prev_wd, "COPY") == 0 ||			 pg_strcasecmp(prev_wd, "\\copy") == 0 ||			 (pg_strcasecmp(prev2_wd, "COPY") == 0 &&			  pg_strcasecmp(prev_wd, "BINARY") == 0))		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);	/* If we have COPY|BINARY <sth>, complete it with "TO" or "FROM" */	else if (pg_strcasecmp(prev2_wd, "COPY") == 0 ||			 pg_strcasecmp(prev2_wd, "\\copy") == 0 ||			 pg_strcasecmp(prev2_wd, "BINARY") == 0)	{		static const char *const list_FROMTO[] =		{"FROM", "TO", NULL};		COMPLETE_WITH_LIST(list_FROMTO);	}	/* If we have COPY|BINARY <sth> FROM|TO, complete with filename */	else if ((pg_strcasecmp(prev3_wd, "COPY") == 0 ||			  pg_strcasecmp(prev3_wd, "\\copy") == 0 ||			  pg_strcasecmp(prev3_wd, "BINARY") == 0) &&			 (pg_strcasecmp(prev_wd, "FROM") == 0 ||			  pg_strcasecmp(prev_wd, "TO") == 0))		matches = completion_matches(text, filename_completion_function);	/* Handle COPY|BINARY <sth> FROM|TO filename */	else if ((pg_strcasecmp(prev4_wd, "COPY") == 0 ||			  pg_strcasecmp(prev4_wd, "\\copy") == 0 ||			  pg_strcasecmp(prev4_wd, "BINARY") == 0) &&			 (pg_strcasecmp(prev2_wd, "FROM") == 0 ||			  pg_strcasecmp(prev2_wd, "TO") == 0))	{		static const char *const list_COPY[] =		{"BINARY", "OIDS", "DELIMITER", "NULL", "CSV", NULL};		COMPLETE_WITH_LIST(list_COPY);	}	/* Handle COPY|BINARY <sth> FROM|TO filename CSV */	else if (pg_strcasecmp(prev_wd, "CSV") == 0 &&			 (pg_strcasecmp(prev3_wd, "FROM") == 0 ||			  pg_strcasecmp(prev3_wd, "TO") == 0))	{		static const char *const list_CSV[] =		{"HEADER", "QUOTE", "ESCAPE", "FORCE QUOTE", NULL};		COMPLETE_WITH_LIST(list_CSV);	}	/* CREATE DATABASE */	else if (pg_strcasecmp(prev3_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev2_wd, "DATABASE") == 0)	{		static const char *const list_DATABASE[] =		{"OWNER", "TEMPLATE", "ENCODING", "TABLESPACE", "CONNECTION LIMIT",		NULL};		COMPLETE_WITH_LIST(list_DATABASE);	}	/* CREATE INDEX */	/* First off we complete CREATE UNIQUE with "INDEX" */	else if (pg_strcasecmp(prev2_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev_wd, "UNIQUE") == 0)		COMPLETE_WITH_CONST("INDEX");	/* If we have CREATE|UNIQUE INDEX <sth>, then add "ON" */	else if (pg_strcasecmp(prev2_wd, "INDEX") == 0 &&			 (pg_strcasecmp(prev3_wd, "CREATE") == 0 ||			  pg_strcasecmp(prev3_wd, "UNIQUE") == 0))		COMPLETE_WITH_CONST("ON");	/* Complete ... INDEX <name> ON with a list of tables  */	else if (pg_strcasecmp(prev3_wd, "INDEX") == 0 &&			 pg_strcasecmp(prev_wd, "ON") == 0)		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);	/*	 * Complete INDEX <name> ON <table> with a list of table columns (which	 * should really be in parens)	 */	else if (pg_strcasecmp(prev4_wd, "INDEX") == 0 &&			 pg_strcasecmp(prev2_wd, "ON") == 0)		COMPLETE_WITH_ATTR(prev_wd);	/* same if you put in USING */	else if (pg_strcasecmp(prev4_wd, "ON") == 0 &&			 pg_strcasecmp(prev2_wd, "USING") == 0)		COMPLETE_WITH_ATTR(prev3_wd);	/* Complete USING with an index method */	else if (pg_strcasecmp(prev_wd, "USING") == 0)	{		static const char *const index_mth[] =		{"BTREE", "RTREE", "HASH", "GIST", NULL};		COMPLETE_WITH_LIST(index_mth);	}/* CREATE RULE */	/* Complete "CREATE RULE <sth>" with "AS" */	else if (pg_strcasecmp(prev3_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev2_wd, "RULE") == 0)		COMPLETE_WITH_CONST("AS");	/* Complete "CREATE RULE <sth> AS with "ON" */	else if (pg_strcasecmp(prev4_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev3_wd, "RULE") == 0 &&			 pg_strcasecmp(prev_wd, "AS") == 0)		COMPLETE_WITH_CONST("ON");	/* Complete "RULE * AS ON" with SELECT|UPDATE|DELETE|INSERT */	else if (pg_strcasecmp(prev4_wd, "RULE") == 0 &&			 pg_strcasecmp(prev2_wd, "AS") == 0 &&			 pg_strcasecmp(prev_wd, "ON") == 0)	{		static const char *const rule_events[] =		{"SELECT", "UPDATE", "INSERT", "DELETE", NULL};		COMPLETE_WITH_LIST(rule_events);	}	/* Complete "AS ON <sth with a 'T' :)>" with a "TO" */	else if (pg_strcasecmp(prev3_wd, "AS") == 0 &&			 pg_strcasecmp(prev2_wd, "ON") == 0 &&			 (toupper((unsigned char) prev_wd[4]) == 'T' ||			  toupper((unsigned char) prev_wd[5]) == 'T'))		COMPLETE_WITH_CONST("TO");	/* Complete "AS ON <sth> TO" with a table name */	else if (pg_strcasecmp(prev4_wd, "AS") == 0 &&			 pg_strcasecmp(prev3_wd, "ON") == 0 &&			 pg_strcasecmp(prev_wd, "TO") == 0)		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);/* CREATE TABLE */	/* Complete CREATE TEMP with "TABLE" */	else if (pg_strcasecmp(prev2_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev_wd, "TEMP") == 0)		COMPLETE_WITH_CONST("TABLE");/* CREATE TABLESPACE */	else if (pg_strcasecmp(prev3_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev2_wd, "TABLESPACE") == 0)	{		static const char *const list_CREATETABLESPACE[] =		{"OWNER", "LOCATION", NULL};		COMPLETE_WITH_LIST(list_CREATETABLESPACE);	}	/* Complete CREATE TABLESPACE name OWNER name with "LOCATION" */	else if (pg_strcasecmp(prev5_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev4_wd, "TABLESPACE") == 0 &&			 pg_strcasecmp(prev2_wd, "OWNER") == 0)	{		COMPLETE_WITH_CONST("LOCATION");	}/* CREATE TRIGGER */	/* complete CREATE TRIGGER <name> with BEFORE,AFTER */	else if (pg_strcasecmp(prev3_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev2_wd, "TRIGGER") == 0)	{		static const char *const list_CREATETRIGGER[] =		{"BEFORE", "AFTER", NULL};		COMPLETE_WITH_LIST(list_CREATETRIGGER);	}	/* complete CREATE TRIGGER <name> BEFORE,AFTER sth with OR,ON */	else if (pg_strcasecmp(prev5_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev4_wd, "TRIGGER") == 0 &&			 (pg_strcasecmp(prev2_wd, "BEFORE") == 0 ||			  pg_strcasecmp(prev2_wd, "AFTER") == 0))	{		static const char *const list_CREATETRIGGER2[] =		{"ON", "OR", NULL};		COMPLETE_WITH_LIST(list_CREATETRIGGER2);	}/* CREATE ROLE,USER,GROUP */	else if (pg_strcasecmp(prev3_wd, "CREATE") == 0 &&			 (pg_strcasecmp(prev2_wd, "ROLE") == 0 ||			  pg_strcasecmp(prev2_wd, "GROUP") == 0 || pg_strcasecmp(prev2_wd, "USER") == 0))	{		static const char *const list_CREATEROLE[] =		{"ADMIN", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE", "CREATEUSER",			"ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOINHERIT", "NOLOGIN", "NOCREATEDB",			"NOCREATEROLE", "NOCREATEUSER", "NOSUPERUSER", "ROLE", "SUPERUSER", "SYSID",		"UNENCRYPTED", NULL};		COMPLETE_WITH_LIST(list_CREATEROLE);	}	/*	 * complete CREATE ROLE,USER,GROUP <name> ENCRYPTED,UNENCRYPTED with	 * PASSWORD	 */	else if (pg_strcasecmp(prev4_wd, "CREATE") == 0 &&			 (pg_strcasecmp(prev3_wd, "ROLE") == 0 ||			  pg_strcasecmp(prev3_wd, "GROUP") == 0 || pg_strcasecmp(prev3_wd, "USER") == 0) &&			 (pg_strcasecmp(prev_wd, "ENCRYPTED") == 0 || pg_strcasecmp(prev_wd, "UNENCRYPTED") == 0))	{		COMPLETE_WITH_CONST("PASSWORD");	}	/* complete CREATE ROLE,USER,GROUP <name> IN with ROLE,GROUP */	else if (pg_strcasecmp(prev4_wd, "CREATE") == 0 &&			 (pg_strcasecmp(prev3_wd, "ROLE") == 0 ||			  pg_strcasecmp(prev3_wd, "GROUP") == 0 || pg_strcasecmp(prev3_wd, "USER") == 0) &&			 pg_strcasecmp(prev_wd, "IN") == 0)	{		static const char *const list_CREATEROLE3[] =		{"GROUP", "ROLE", NULL};		COMPLETE_WITH_LIST(list_CREATEROLE3);	}/* CREATE VIEW */	/* Complete CREATE VIEW <name> with AS */	else if (pg_strcasecmp(prev3_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev2_wd, "VIEW") == 0)		COMPLETE_WITH_CONST("AS");	/* Complete "CREATE VIEW <sth> AS with "SELECT" */	else if (pg_strcasecmp(prev4_wd, "CREATE") == 0 &&			 pg_strcasecmp(prev3_wd, "VIEW") == 0 &&			 pg_strcasecmp(prev_wd, "AS") == 0)		COMPLETE_WITH_CONST("SELECT");/* DECLARE */	else if (pg_strcasecmp(prev2_wd, "DECLARE") == 0)	{		static const char *const list_DECLARE[] =		{"BINARY", "INSENSITIVE", "SCROLL", "NO SCROLL", "CURSOR", NULL};		COMPLETE_WITH_LIST(list_DECLARE);	}	else if (pg_strcasecmp(prev_wd, "CURSOR") == 0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -