PageRenderTime 48ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/eclipse-dtp-1.10/org.eclipse.datatools.sqltools-DTP_1_10_0_Release_201206131012/plugins/org.eclipse.datatools.sqltools.sqlbuilder/src/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/MSSQLServerFunctionNamesAndSignatures.java

#
Java | 1302 lines | 1244 code | 47 blank | 11 comment | 291 complexity | 7bfba630c08d7689c90757c048cbd562 MD5 | raw file
  1. /*******************************************************************************
  2. * Copyright Š 2000, 2007 IBM Corporation and others.
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which is available at
  6. * http://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * IBM Corporation - initial API and implementation
  10. *******************************************************************************/
  11. package org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder;
  12. import java.util.Arrays;
  13. import java.util.List;
  14. import org.eclipse.datatools.sqltools.sqlbuilder.Messages;
  15. import org.eclipse.datatools.sqltools.sqlbuilder.model.SQLDomainModel;
  16. import org.eclipse.swt.widgets.Combo;
  17. public class MSSQLServerFunctionNamesAndSignatures
  18. {
  19. public static final String msSQLServerAll = Messages._UI_FCN_ALL;
  20. public static final String msSQLServerAggregate = Messages._UI_FCN_AGGREGATE;
  21. public static final String msSQLServerConfiguration = "Configuration";
  22. public static final String msSQLServerCursor = "Cursor";
  23. public static final String msSQLServerDateAndTime = Messages._UI_FCN_DATE_TIME;
  24. public static final String msSQLServerMath = Messages._UI_FCN_MATH;
  25. public static final String msSQLServerMetadata = "Metadata";
  26. public static final String msSQLServerSecurity = "Security";
  27. public static final String msSQLServerString = Messages._UI_FCN_STRING;
  28. public static final String msSQLServerSystem = Messages._UI_FCN_SYSTEM;
  29. public static final String msSQLServerSystemStatistical = "System Statistical";
  30. public static final String msSQLServerTextAndImage = "Text and Image";
  31. public static final String msSQLServerRowset = "Rowset";
  32. public static final String msSQLServerNotSupported = Messages._UI_FCN_NOT_SUPPORTED;
  33. public static String dbUDF = Messages._UI_FCN_UDF;
  34. private static final String allFunctions[] =
  35. {
  36. "ABS",
  37. "ACOS",
  38. "APP_NAME",
  39. "ASCII",
  40. "ASIN",
  41. "ATAN",
  42. "ATN2",
  43. "AVG",
  44. "CEILING",
  45. "CHAR",
  46. "CHARINDEX",
  47. "COALESCE",
  48. "COLUMNPROPERTY",
  49. "COL_LENGTH",
  50. "COL_NAME",
  51. "CONTAINSTABLE",
  52. "CONVERT",
  53. "COS",
  54. "COT",
  55. "COUNT",
  56. "CURRENT_TIMESTAMP", // no brackets
  57. "CURRENT_USER", // no brackets
  58. "CURSOR_STATUS",
  59. "DATABASEPROPERTY",
  60. "DATALENGTH",
  61. "DATEADD",
  62. "DATEDIFF",
  63. "DATENAME",
  64. "DATEPART",
  65. "DAY",
  66. "DB_ID",
  67. "DB_NAME",
  68. "DEGREES",
  69. "DIFFERENCE",
  70. "EXP",
  71. "FILEGROUPPROPERTY",
  72. "FILEGROUP_ID",
  73. "FILEGROUP_NAME",
  74. "FILEPROPERTY",
  75. "FILE_ID",
  76. "FILE_NAME",
  77. "FLOOR",
  78. "FORMATMESSAGE",
  79. "FREETEXTTABLE",
  80. "FULLTEXTCATALOGPROPERTY",
  81. "FULLTEXTSERVICEPROPERTY",
  82. "GETANSINULL",
  83. "GETDATE",
  84. "GROUPING",
  85. "HOST_ID",
  86. "HOST_NAME",
  87. "IDENTITY",
  88. "IDENT_INCR",
  89. "IDENT_SEED",
  90. "INDEXPROPERTY",
  91. "INDEX_COL",
  92. "ISDATE",
  93. "ISNULL",
  94. "ISNUMERIC",
  95. "IS_MEMBER",
  96. "IS_SRVROLEMEMBER",
  97. "LEFT",
  98. "LEN",
  99. "LOG10",
  100. "LOG",
  101. "LOWER",
  102. "LTRIM",
  103. "MAX",
  104. "MIN",
  105. "MONTH",
  106. "NCHAR",
  107. "NEWID",
  108. "NULLIF",
  109. "OBJECTPROPERTY",
  110. "OBJECT_ID",
  111. "OBJECT_NAME",
  112. "OPENQUERY",
  113. "OPENROWSET",
  114. "PARSENAME",
  115. "PATINDEX",
  116. "PATINDEX",
  117. "PERMISSIONS",
  118. "PI",
  119. "POWER",
  120. "QUOTENAME",
  121. "RADIANS",
  122. "RAND",
  123. "REPLACE",
  124. "REPLICATE",
  125. "REVERSE",
  126. "RIGHT",
  127. "ROUND",
  128. "RTRIM",
  129. "SESSION_USER", // no brackets
  130. "SIGN",
  131. "SIN",
  132. "SOUNDEX",
  133. "SPACE",
  134. "SQRT",
  135. "SQUARE",
  136. "STATS_DATE",
  137. "STDEVP",
  138. "STDEV",
  139. "STR",
  140. "STUFF",
  141. "SUBSTRING",
  142. "SUM",
  143. "SUSER_ID",
  144. "SUSER_NAME",
  145. "SUSER_SID",
  146. "SUSER_SNAME",
  147. "SYSTEM_USER", // no brackets
  148. "TAN",
  149. "TEXTPTR",
  150. "TEXTVALID",
  151. "TYPEPROPERTY",
  152. "UNICODE",
  153. "UPPER",
  154. "USER", // no brackets
  155. "USER_ID",
  156. "USER_NAME",
  157. "VARP",
  158. "VAR",
  159. "YEAR",
  160. "@@CONNECTIONS", // no brackets
  161. "@@CPU_BUSY",
  162. "@@CURSOR_ROWS",
  163. "@@DATEFIRST",
  164. "@@DBTS",
  165. "@@ERROR",
  166. "@@FETCH_STATUS",
  167. "@@IDENTITY",
  168. "@@IDLE",
  169. "@@IO_BUSY",
  170. "@@LANGID",
  171. "@@LANGUAGE",
  172. "@@LOCK_TIMEOUT",
  173. "@@MAX_CONNECTIONS",
  174. "@@MAX_PRECISION",
  175. "@@NESTLEVEL",
  176. "@@OPTIONS",
  177. "@@PACKET_ERRORS",
  178. "@@PACK_RECEIVED",
  179. "@@PACK_SENT",
  180. "@@PROCID",
  181. "@@REMSERVER",
  182. "@@ROWCOUNT",
  183. "@@SERVERNAME",
  184. "@@SERVICENAME",
  185. "@@SPID",
  186. "@@TEXTSIZE",
  187. "@@TIMETICKS",
  188. "@@TOTAL_ERRORS",
  189. "@@TOTAL_READ",
  190. "@@TOTAL_WRITE",
  191. "@@TRANCOUNT",
  192. "@@VERSION"
  193. };
  194. private static final String allColumnSupportedFunctions[] = allFunctions;
  195. private static final String functionsSupportingStar[] =
  196. {
  197. "COUNT"
  198. };
  199. private static final String unsupportedFunctions[] =
  200. {
  201. "COALESCE",
  202. "CONTAINSTABLE",
  203. "CONVERT",
  204. "CURSOR_STATUS",
  205. "FORMATMESSAGE",
  206. "FREETEXTTABLE",
  207. "IDENTITY",
  208. "OPENROWSET"
  209. };
  210. private static final String noBracketFunctions[] =
  211. {
  212. "CURRENT_TIMESTAMP",
  213. "CURRENT_USER",
  214. "SESSION_USER",
  215. "SYSTEM_USER",
  216. "USER",
  217. "@@CONNECTIONS",
  218. "@@CPU_BUSY",
  219. "@@CURSOR_ROWS",
  220. "@@DATEFIRST",
  221. "@@DBTS",
  222. "@@ERROR",
  223. "@@FETCH_STATUS",
  224. "@@IDENTITY",
  225. "@@IDLE",
  226. "@@IO_BUSY",
  227. "@@LANGID",
  228. "@@LANGUAGE",
  229. "@@LOCK_TIMEOUT",
  230. "@@MAX_CONNECTIONS",
  231. "@@MAX_PRECISION",
  232. "@@NESTLEVEL",
  233. "@@OPTIONS",
  234. "@@PACKET_ERRORS",
  235. "@@PACK_RECEIVED",
  236. "@@PACK_SENT",
  237. "@@PROCID",
  238. "@@REMSERVER",
  239. "@@ROWCOUNT",
  240. "@@SERVERNAME",
  241. "@@SERVICENAME",
  242. "@@SPID",
  243. "@@TEXTSIZE",
  244. "@@TIMETICKS",
  245. "@@TOTAL_ERRORS",
  246. "@@TOTAL_READ",
  247. "@@TOTAL_WRITE",
  248. "@@TRANCOUNT",
  249. "@@VERSION"
  250. };
  251. private static final String aggregateFunctions[] =
  252. {
  253. "AVG",
  254. "COUNT",
  255. "GROUPING",
  256. "MAX",
  257. "MIN",
  258. "SUM",
  259. "STDEV",
  260. "STDEVP",
  261. "VAR",
  262. "VARP"
  263. };
  264. private static final String configurationFunctions[] =
  265. {
  266. "@@CONNECTIONS",
  267. "@@DATEFIRST",
  268. "@@DBTS",
  269. "@@LANGID",
  270. "@@LANGUAGE",
  271. "@@LOCK_TIMEOUT",
  272. "@@MAX_CONNECTIONS",
  273. "@@MAX_PRECISION",
  274. "@@NESTLEVEL",
  275. "@@OPTIONS",
  276. "@@REMSERVER",
  277. "@@SERVERNAME",
  278. "@@SERVICENAME",
  279. "@@SPID",
  280. "@@TEXTSIZE",
  281. "@@VERSION"
  282. };
  283. private static final String cursorFunctions[] =
  284. {
  285. "CURSOR_STATUS",
  286. "@@CURSOR_ROWS",
  287. "@@FETCH_STATUS"
  288. };
  289. private static final String dateAndTimeFunctions[] =
  290. {
  291. "DATEADD",
  292. "DATEDIFF",
  293. "DATENAME",
  294. "DATEPART",
  295. "DAY",
  296. "GETDATE",
  297. "MONTH",
  298. "YEAR"
  299. };
  300. private static final String mathFunctions[] =
  301. {
  302. "ABS",
  303. "ACOS",
  304. "ASIN",
  305. "ATAN",
  306. "ATN2",
  307. "CEILING",
  308. "COS",
  309. "COT",
  310. "DEGREES",
  311. "EXP",
  312. "FLOOR",
  313. "LOG",
  314. "LOG10",
  315. "PI",
  316. "POWER",
  317. "RADIANS",
  318. "RAND",
  319. "ROUND",
  320. "SIGN",
  321. "SIN",
  322. "SQUARE",
  323. "SQRT",
  324. "TAN"
  325. };
  326. private static final String metadataFunctions[] =
  327. {
  328. "COL_LENGTH",
  329. "COL_NAME",
  330. "COLUMNPROPERTY",
  331. "DATABASEPROPERTY",
  332. "DB_ID",
  333. "DB_NAME",
  334. "FILEGROUPPROPERTY",
  335. "FILEGROUP_ID",
  336. "FILEGROUP_NAME",
  337. "FILEPROPERTY",
  338. "FILE_ID",
  339. "FILE_NAME",
  340. "FULLTEXTCATALOGPROPERTY",
  341. "FULLTEXTSERVICEPROPERTY",
  342. "INDEXPROPERTY",
  343. "INDEX_COL",
  344. "OBJECTPROPERTY",
  345. "OBJECT_ID",
  346. "OBJECT_NAME",
  347. "TYPEPROPERTY",
  348. "@@PROCID"
  349. };
  350. private static final String securityFunctions[] =
  351. {
  352. "IS_MEMBER",
  353. "IS_SRVROLEMEMBER",
  354. "SUSER_ID",
  355. "SUSER_NAME",
  356. "SUSER_SID",
  357. "SUSER_SNAME",
  358. "USER_ID",
  359. "USER" // no brackets
  360. };
  361. private static final String stringFunctions[] =
  362. {
  363. "ASCII",
  364. "CHAR",
  365. "CHARINDEX",
  366. "DIFFERENCE",
  367. "LEFT",
  368. "LEN",
  369. "LOWER",
  370. "LTRIM",
  371. "NCHAR",
  372. "PATINDEX",
  373. "QUOTENAME",
  374. "REPLACE",
  375. "REPLICATE",
  376. "REVERSE",
  377. "RIGHT",
  378. "RTRIM",
  379. "SOUNDEX",
  380. "SPACE",
  381. "STR",
  382. "STUFF",
  383. "SUBSTRING",
  384. "UNICODE",
  385. "UPPER"
  386. };
  387. private static final String systemFunctions[] =
  388. {
  389. "APP_NAME",
  390. "CONVERT",
  391. "COALESCE",
  392. "CURRENT_TIMESTAMP", // no brackets
  393. "CURRENT_USER", // no brackets
  394. "DATALENGTH",
  395. "FORMATMESSAGE",
  396. "GETANSINULL",
  397. "HOST_ID",
  398. "HOST_NAME",
  399. "IDENT_INCR",
  400. "IDENT_SEED",
  401. "IDENTITY",
  402. "ISDATE",
  403. "ISNULL",
  404. "ISNUMERIC",
  405. "NEWID",
  406. "NULLIF",
  407. "PARSENAME",
  408. "PERMISSIONS",
  409. "SESSION_USER", // no brackets
  410. "STATS_DATE",
  411. "SYSTEM_USER", // no brackets
  412. "USER_NAME",
  413. "@@ERROR",
  414. "@@IDENTITY",
  415. "@@ROWCOUNT",
  416. "@@TRANCOUNT"
  417. };
  418. private static final String systemStatisticalFunctions[] =
  419. {
  420. "@@CPU_BUSY",
  421. "@@IDLE",
  422. "@@IO_BUSY",
  423. "@@PACKET_ERRORS",
  424. "@@PACK_RECEIVED",
  425. "@@PACK_SENT",
  426. "@@TIMETICKS",
  427. "@@TOTAL_ERRORS",
  428. "@@TOTAL_READ",
  429. "@@TOTAL_WRITE"
  430. };
  431. private static final String textAndImageFunctions[] =
  432. {
  433. "PATINDEX",
  434. "TEXTPTR",
  435. "TEXTVALID"
  436. };
  437. private static final String rowsetFunctions[] =
  438. {
  439. "CONTAINSTABLE",
  440. "FREETEXTTABLE",
  441. "OPENQUERY",
  442. "OPENROWSET"
  443. };
  444. public static Object[][] getParms(String func)
  445. {
  446. Object[][] list = new Object[1][2];
  447. list[0][0] = "???"; list[0][1] = "???";
  448. if (func.equals("ABS"))
  449. {
  450. list[0][0] = "numeric_expression"; list[0][1] = "numeric_expression";
  451. }
  452. else if (func.equals("ACOS"))
  453. {
  454. list[0][0] = "float_expression"; list[0][1] = "float_expression";
  455. }
  456. else if (func.equals("APP_NAME"))
  457. {
  458. list = new Object[1][1];
  459. list[0][0] = "nvarchar";
  460. }
  461. else if (func.equals("ASCII"))
  462. {
  463. list[0][0] = "int"; list[0][1] = "character_expression";
  464. }
  465. else if (func.equals("ASIN"))
  466. {
  467. list[0][0] = "float_expression"; list[0][1] = "float_expression";
  468. }
  469. else if (func.equals("ATAN"))
  470. {
  471. list[0][0] = "float_expression"; list[0][1] = "float_expression";
  472. }
  473. else if (func.equals("ATN2"))
  474. {
  475. list = new Object[1][3];
  476. list[0][0] = "float_expression"; list[0][1] = "float_expression"; list[0][2] = "float_expression";
  477. }
  478. else if (func.equals("AVG")) // DISTINCT, ALL
  479. {
  480. list[0][0] = "numeric_expression"; list[0][1] = "expression";
  481. }
  482. else if (func.equals("CEILING"))
  483. {
  484. list[0][0] = "numeric_expression"; list[0][1] = "numeric_expression";
  485. }
  486. else if (func.equals("CHAR"))
  487. {
  488. list[0][0] = "char(1)"; list[0][1] = "integer";
  489. }
  490. else if (func.equals("CHARINDEX"))
  491. {
  492. list = new Object[2][];
  493. list[0] = new Object[3];
  494. list[1] = new Object[4];
  495. list[0][0] = "int"; list[0][1] = "expression"; list[0][2] = "expression";
  496. list[1][0] = "int"; list[1][1] = "expression"; list[1][2] = "expression"; list[1][3] = "start_location";
  497. }
  498. else if (func.equals("COALESCE"))
  499. {
  500. list = new Object[1][1];
  501. list[0][0] = msSQLServerNotSupported;
  502. }
  503. else if (func.equals("COLUMNPROPERTY")) // property is fixed
  504. {
  505. list = new Object[1][4];
  506. list[0][0] = "property"; list[0][1] = "id"; list[0][2] = "column"; list[0][3] = "property";
  507. }
  508. else if (func.equals("COL_LENGTH"))
  509. {
  510. list = new Object[1][3];
  511. list[0][0] = "int"; list[0][1] = "'table'"; list[0][2] = "'column'";
  512. }
  513. else if (func.equals("COL_NAME"))
  514. {
  515. list = new Object[1][3];
  516. list[0][0] = "sysname"; list[0][1] = "table_id"; list[0][2] = "column_id";
  517. }
  518. else if (func.equals("CONTAINSTABLE"))
  519. {
  520. list = new Object[1][1];
  521. list[0][0] = msSQLServerNotSupported;
  522. }
  523. else if (func.equals("CONVERT"))
  524. {
  525. list = new Object[1][1];
  526. list[0][0] = msSQLServerNotSupported;
  527. }
  528. else if (func.equals("COS"))
  529. {
  530. list[0][0] = "float_expression"; list[0][1] = "float_expression";
  531. }
  532. else if (func.equals("COT"))
  533. {
  534. list[0][0] = "float_expression"; list[0][1] = "float_expression";
  535. }
  536. else if (func.equals("COUNT")) // DISTINCT, ALL
  537. {
  538. list[0][0] = "int"; list[0][1] = "expression";
  539. }
  540. else if (func.equals("CURRENT_TIMESTAMP")) // no brackets
  541. {
  542. list = new Object[1][1];
  543. list[0][0] = "datetime";
  544. }
  545. else if (func.equals("CURRENT_USER")) // no brackets
  546. {
  547. list = new Object[1][1];
  548. list[0][0] = "sysname";
  549. }
  550. else if (func.equals("CURSOR_STATUS"))
  551. {
  552. list = new Object[1][1];
  553. list[0][0] = msSQLServerNotSupported;
  554. }
  555. else if (func.equals("DATABASEPROPERTY")) // property is fixed
  556. {
  557. list = new Object[1][3];
  558. list[0][0] = "property"; list[0][1] = "database"; list[0][2] = "property";
  559. }
  560. else if (func.equals("DATALENGTH"))
  561. {
  562. list[0][0] = "int"; list[0][1] = "expression";
  563. }
  564. else if (func.equals("DATEADD")) // datepart is fixed
  565. {
  566. list = new Object[2][4];
  567. list[0][0] = "datetime"; list[0][1] = "datepart"; list[0][2] = "number"; list[0][3] = "datetime";
  568. list[1][0] = "smalldatetime"; list[1][1] = "datepart"; list[1][2] = "number"; list[1][3] = "smalldatetime";
  569. }
  570. else if (func.equals("DATEDIFF")) // datepart is fixed
  571. {
  572. list = new Object[1][4];
  573. list[0][0] = "integer"; list[0][1] = "datepart"; list[0][2] = "startdate"; list[0][3] = "enddate";
  574. }
  575. else if (func.equals("DATENAME")) // datepart is fixed
  576. {
  577. list = new Object[1][3];
  578. list[0][0] = "nvarchar"; list[0][1] = "datepart"; list[0][2] = "date";
  579. }
  580. else if (func.equals("DATEPART")) // datepart is fixed
  581. {
  582. list = new Object[1][3];
  583. list[0][0] = "int"; list[0][1] = "datepart"; list[0][2] = "date";
  584. }
  585. else if (func.equals("DAY"))
  586. {
  587. list[0][0] = "int"; list[0][1] = "date";
  588. }
  589. else if (func.equals("DB_ID"))
  590. {
  591. list = new Object[2][];
  592. list[0] = new Object[1];
  593. list[1] = new Object[2];
  594. list[0][0] = "smallint";
  595. list[1][0] = "smallint"; list[1][1] = "'database_name'";
  596. }
  597. else if (func.equals("DB_NAME"))
  598. {
  599. list[0][0] = "nvarchar(128)"; list[0][1] = "database_id";
  600. }
  601. else if (func.equals("DEGREES"))
  602. {
  603. list[0][0] = "numeric_expression"; list[0][1] = "numeric_expression";
  604. }
  605. else if (func.equals("DIFFERENCE"))
  606. {
  607. list = new Object[1][3];
  608. list[0][0] = "int"; list[0][1] = "character_expression"; list[0][2] = "character_expression";
  609. }
  610. else if (func.equals("EXP"))
  611. {
  612. list[0][0] = "float_expression"; list[0][1] = "float_expression";
  613. }
  614. else if (func.equals("FILEGROUPPROPERTY")) // property is fixed
  615. {
  616. list = new Object[1][3];
  617. list[0][0] = "int"; list[0][1] = "filegroup_name"; list[0][2] = "property";
  618. }
  619. else if (func.equals("FILEGROUP_ID"))
  620. {
  621. list[0][0] = "smallint"; list[0][1] = "'filegroup_name'";
  622. }
  623. else if (func.equals("FILEGROUP_NAME"))
  624. {
  625. list[0][0] = "nvarchar(128)"; list[0][1] = "filegroup_id";
  626. }
  627. else if (func.equals("FILEPROPERTY")) // property is fixed
  628. {
  629. list = new Object[1][3];
  630. list[0][0] = "int"; list[0][1] = "file_name"; list[0][2] = "property";
  631. }
  632. else if (func.equals("FILE_ID"))
  633. {
  634. list[0][0] = "smallint"; list[0][1] = "'file_name'";
  635. }
  636. else if (func.equals("FILE_NAME"))
  637. {
  638. list[0][0] = "nvarchar(128)"; list[0][1] = "file_id";
  639. }
  640. else if (func.equals("FLOOR"))
  641. {
  642. list[0][0] = "numeric_expression"; list[0][1] = "numeric_expression";
  643. }
  644. else if (func.equals("FORMATMESSAGE"))
  645. {
  646. list = new Object[1][1];
  647. list[0][0] = msSQLServerNotSupported;
  648. }
  649. else if (func.equals("FREETEXTTABLE"))
  650. {
  651. list = new Object[1][1];
  652. list[0][0] = msSQLServerNotSupported;
  653. }
  654. else if (func.equals("FULLTEXTCATALOGPROPERTY")) // property is fixed
  655. {
  656. list = new Object[1][3];
  657. list[0][0] = "int"; list[0][1] = "catalog_name"; list[0][2] = "property";
  658. }
  659. else if (func.equals("FULLTEXTSERVICEPROPERTY")) // property is fixed
  660. {
  661. list[0][0] = "int"; list[0][1] = "property";
  662. }
  663. else if (func.equals("GETANSINULL"))
  664. {
  665. list = new Object[2][];
  666. list[0] = new Object[1];
  667. list[1] = new Object[2];
  668. list[0][0] = "int";
  669. list[1][0] = "int"; list[1][1] = "'database'";
  670. }
  671. else if (func.equals("GETDATE"))
  672. {
  673. list = new Object[1][1];
  674. list[0][0] = "datetime";
  675. }
  676. else if (func.equals("GROUPING"))
  677. {
  678. list[0][0] = "int"; list[0][1] = "column_name";
  679. }
  680. else if (func.equals("HOST_ID"))
  681. {
  682. list = new Object[1][1];
  683. list[0][0] = "char(8)";
  684. }
  685. else if (func.equals("HOST_NAME"))
  686. {
  687. list = new Object[1][1];
  688. list[0][0] = "nchar";
  689. }
  690. else if (func.equals("IDENTITY"))
  691. {
  692. list = new Object[1][1];
  693. list[0][0] = msSQLServerNotSupported;
  694. }
  695. else if (func.equals("IDENT_INCR"))
  696. {
  697. list[0][0] = "numeric_expression"; list[0][1] = "'table_or_view'";
  698. }
  699. else if (func.equals("IDENT_SEED"))
  700. {
  701. list[0][0] = "numeric_expression"; list[0][1] = "'table_or_view'";
  702. }
  703. else if (func.equals("INDEXPROPERTY"))
  704. {
  705. list = new Object[1][4];
  706. list[0][0] = "int"; list[0][1] = "table_ID"; list[0][2] = "index"; list[0][3] = "property";
  707. }
  708. else if (func.equals("INDEX_COL"))
  709. {
  710. list = new Object[1][4];
  711. list[0][0] = "nchar"; list[0][1] = "'table'"; list[0][2] = "index_id"; list[0][3] = "key_id";
  712. }
  713. else if (func.equals("ISDATE"))
  714. {
  715. list[0][0] = "int"; list[0][1] = "expression";
  716. }
  717. else if (func.equals("ISNULL"))
  718. {
  719. list = new Object[1][3];
  720. list[0][0] = "integer"; list[0][1] = "check_expression"; list[0][2] = "replacement_value";
  721. }
  722. else if (func.equals("ISNUMERIC"))
  723. {
  724. list[0][0] = "int"; list[0][1] = "expression";
  725. }
  726. else if (func.equals("IS_MEMBER"))
  727. {
  728. list[0][0] = "int"; list[0][1] = "'group' | 'role'";
  729. }
  730. else if (func.equals("IS_SRVROLEMEMBER"))
  731. {
  732. list = new Object[2][];
  733. list[0] = new Object[2];
  734. list[1] = new Object[3];
  735. list[0][0] = "int"; list[0][1] = "'role'";
  736. list[1][0] = "int"; list[1][1] = "'role'"; list[1][2] = "'login'";
  737. }
  738. else if (func.equals("LEFT"))
  739. {
  740. list = new Object[1][3];
  741. list[0][0] = "varchar"; list[0][1] = "character_expression"; list[0][2] = "integer_expression";
  742. }
  743. else if (func.equals("LEN"))
  744. {
  745. list[0][0] = "int"; list[0][1] = "string_expression";
  746. }
  747. else if (func.equals("LOG"))
  748. {
  749. list[0][0] = "float"; list[0][1] = "float_expression";
  750. }
  751. else if (func.equals("LOG10"))
  752. {
  753. list[0][0] = "float"; list[0][1] = "float_expression";
  754. }
  755. else if (func.equals("LOWER"))
  756. {
  757. list[0][0] = "varchar"; list[0][1] = "character_expression";
  758. }
  759. else if (func.equals("LTRIM"))
  760. {
  761. list[0][0] = "varchar"; list[0][1] = "character_expression";
  762. }
  763. else if (func.equals("MAX")) // ALL | DISTINCT
  764. {
  765. list[0][0] = "expression"; list[0][1] = "expression";
  766. }
  767. else if (func.equals("MIN")) // ALL | DISTINCT
  768. {
  769. list[0][0] = "expression"; list[0][1] = "expression";
  770. }
  771. else if (func.equals("MONTH"))
  772. {
  773. list[0][0] = "int"; list[0][1] = "date";
  774. }
  775. else if (func.equals("NCHAR"))
  776. {
  777. list[0][0] = "nchar(1)"; list[0][1] = "integer_expression";
  778. }
  779. else if (func.equals("NEWID"))
  780. {
  781. list = new Object[1][1];
  782. list[0][0] = "uniqueidentifier";
  783. }
  784. else if (func.equals("NULLIF"))
  785. {
  786. list = new Object[1][3];
  787. list[0][0] = "expression"; list[0][1] = "expression"; list[0][2] = "expression";
  788. }
  789. else if (func.equals("OBJECTPROPERTY")) // property is fixed
  790. {
  791. list = new Object[1][3];
  792. list[0][0] = "int"; list[0][1] = "object_id"; list[0][2] = "property";
  793. }
  794. else if (func.equals("OBJECT_ID"))
  795. {
  796. list[0][0] = "int"; list[0][1] = "'object'";
  797. }
  798. else if (func.equals("OBJECT_NAME"))
  799. {
  800. list[0][0] = "nchar"; list[0][1] = "object_id";
  801. }
  802. else if (func.equals("OPENQUERY"))
  803. {
  804. list[0][0] = "result_set"; list[0][1] = "'query'";
  805. }
  806. else if (func.equals("OPENROWSET"))
  807. {
  808. list = new Object[1][1];
  809. list[0][0] = msSQLServerNotSupported;
  810. }
  811. else if (func.equals("PARSENAME")) // object_piece is fixed: 1,2,3 or 4
  812. {
  813. list = new Object[1][3];
  814. list[0][0] = "nchar"; list[0][1] = "'object_name'"; list[0][2] = "object_piece";
  815. }
  816. else if (func.equals("PATINDEX"))
  817. {
  818. list = new Object[1][3];
  819. list[0][0] = "int"; list[0][1] = "'%pattern%'"; list[0][2] = "expression";
  820. }
  821. else if (func.equals("PERMISSIONS"))
  822. {
  823. list = new Object[3][];
  824. list[0] = new Object[1];
  825. list[1] = new Object[2];
  826. list[2] = new Object[3];
  827. list[0][0] = "int";
  828. list[1][0] = "int"; list[1][1] = "object_id";
  829. list[2][0] = "int"; list[2][1] = "object_id"; list[2][2] = "'column'";
  830. }
  831. else if (func.equals("PI"))
  832. {
  833. list = new Object[1][1];
  834. list[0][0] = "float";
  835. }
  836. else if (func.equals("POWER"))
  837. {
  838. list = new Object[1][3];
  839. list[0][0] = "numeric_expression"; list[0][1] = "numeric_expression"; list[0][2] = "numeric_expression";
  840. }
  841. else if (func.equals("QUOTENAME"))
  842. {
  843. list = new Object[2][];
  844. list[0] = new Object[2];
  845. list[1] = new Object[3];
  846. list[0][0] = "nvarchar(129)"; list[0][1] = "'character_string'";
  847. list[1][0] = "nvarchar(129)"; list[1][1] = "'character_string'"; list[1][2] = "'quote_character'";
  848. }
  849. else if (func.equals("RADIANS"))
  850. {
  851. list[0][0] = "numeric_expression"; list[0][1] = "numeric_expression";
  852. }
  853. else if (func.equals("RAND"))
  854. {
  855. list = new Object[2][];
  856. list[0] = new Object[1];
  857. list[1] = new Object[2];
  858. list[0][0] = "float";
  859. list[1][0] = "float"; list[1][1] = "integer_expression";
  860. }
  861. else if (func.equals("REPLACE"))
  862. {
  863. list = new Object[1][4];
  864. list[0][0] = "character_data"; list[0][1] = "string_expression1"; list[0][2] = "string_expression2"; list[0][3] = "string_expression3";
  865. }
  866. else if (func.equals("REPLICATE"))
  867. {
  868. list = new Object[1][3];
  869. list[0][0] = "varchar"; list[0][1] = "character_expression"; list[0][2] = "integer_expression";
  870. }
  871. else if (func.equals("REVERSE"))
  872. {
  873. list[0][0] = "varchar"; list[0][1] = "character_expression";
  874. }
  875. else if (func.equals("RIGHT"))
  876. {
  877. list = new Object[1][3];
  878. list[0][0] = "varchar"; list[0][1] = "character_expression"; list[0][2] = "integer_expression";
  879. }
  880. else if (func.equals("ROUND"))
  881. {
  882. list = new Object[2][];
  883. list[0] = new Object[3];
  884. list[1] = new Object[4];
  885. list[0][0] = "numeric_expression"; list[0][1] = "numeric_expression"; list[0][2] = "length";
  886. list[1][0] = "numeric_expression"; list[1][1] = "numeric_expression"; list[1][2] = "length"; list[1][3] = "function";
  887. }
  888. else if (func.equals("RTRIM"))
  889. {
  890. list[0][0] = "varchar"; list[0][1] = "character_expression";
  891. }
  892. else if (func.equals("SESSION_USER")) // no brackets
  893. {
  894. list = new Object[1][1];
  895. list[0][0] = "nchar";
  896. }
  897. else if (func.equals("SIGN"))
  898. {
  899. list[0][0] = "float"; list[0][1] = "numeric_expression";
  900. }
  901. else if (func.equals("SIN"))
  902. {
  903. list[0][0] = "float"; list[0][1] = "float_expression";
  904. }
  905. else if (func.equals("SOUNDEX"))
  906. {
  907. list[0][0] = "char"; list[0][1] = "character_expression";
  908. }
  909. else if (func.equals("SPACE"))
  910. {
  911. list[0][0] = "char"; list[0][1] = "integer_expression";
  912. }
  913. else if (func.equals("SQRT"))
  914. {
  915. list[0][0] = "float"; list[0][1] = "float_expression";
  916. }
  917. else if (func.equals("SQUARE"))
  918. {
  919. list[0][0] = "float"; list[0][1] = "float_expression";
  920. }
  921. else if (func.equals("STATS_DATE"))
  922. {
  923. list = new Object[1][3];
  924. list[0][0] = "datetime"; list[0][1] = "table_id"; list[0][2] = "index_id";
  925. }
  926. else if (func.equals("STDEV"))
  927. {
  928. list[0][0] = "float"; list[0][1] = "expression";
  929. }
  930. else if (func.equals("STDEVP"))
  931. {
  932. list[0][0] = "float"; list[0][1] = "expression";
  933. }
  934. else if (func.equals("STR"))
  935. {
  936. list = new Object[3][];
  937. list[0] = new Object[2];
  938. list[1] = new Object[3];
  939. list[2] = new Object[4];
  940. list[0][0] = "char"; list[0][1] = "float_expression";
  941. list[1][0] = "char"; list[1][1] = "float_expression"; list[1][2] = "length";
  942. list[2][0] = "char"; list[2][1] = "float_expression"; list[2][2] = "length"; list[2][3] = "decimal";
  943. }
  944. else if (func.equals("STUFF"))
  945. {
  946. list = new Object[2][5];
  947. list[0][0] = "character_data"; list[0][1] = "character_expression"; list[0][2] = "start"; list[0][3] = "length"; list[0][4] = "character_expression";
  948. list[1][0] = "binary_data"; list[1][1] = "binary_expression"; list[1][2] = "start"; list[1][3] = "length"; list[1][4] = "binary_expression";
  949. }
  950. else if (func.equals("SUBSTRING"))
  951. {
  952. list = new Object[1][4];
  953. list[0][0] = "expression"; list[0][1] = "expression"; list[0][2] = "start"; list[0][3] = "length";
  954. }
  955. else if (func.equals("SUM")) // DISTINCT | ALL
  956. {
  957. list[0][0] = "expression"; list[0][1] = "expression";
  958. }
  959. else if (func.equals("SUSER_ID"))
  960. {
  961. list = new Object[2][];
  962. list[0] = new Object[1];
  963. list[1] = new Object[2];
  964. list[0][0] = "int";
  965. list[1][0] = "int"; list[1][1] = "'login'";
  966. }
  967. else if (func.equals("SUSER_NAME"))
  968. {
  969. list = new Object[2][];
  970. list[0] = new Object[1];
  971. list[1] = new Object[2];
  972. list[0][0] = "nchar";
  973. list[1][0] = "nchar"; list[1][1] = "server_user_id";
  974. }
  975. else if (func.equals("SUSER_SID"))
  976. {
  977. list = new Object[2][];
  978. list[0] = new Object[1];
  979. list[1] = new Object[2];
  980. list[0][0] = "int";
  981. list[1][0] = "int"; list[1][1] = "'login'";
  982. }
  983. else if (func.equals("SUSER_SNAME"))
  984. {
  985. list = new Object[2][];
  986. list[0] = new Object[1];
  987. list[1] = new Object[2];
  988. list[0][0] = "nchar";
  989. list[1][0] = "nchar"; list[1][1] = "server_user_id";
  990. }
  991. else if (func.equals("SYSTEM_USER")) // no brackets
  992. {
  993. list = new Object[1][1];
  994. list[0][0] = "char";
  995. }
  996. else if (func.equals("TAN"))
  997. {
  998. list[0][0] = "float"; list[0][1] = "float_expression";
  999. }
  1000. else if (func.equals("TEXTPTR"))
  1001. {
  1002. list[0][0] = "varbinary"; list[0][1] = "column";
  1003. }
  1004. else if (func.equals("TEXTVALID"))
  1005. {
  1006. list = new Object[1][3];
  1007. list[0][0] = "int"; list[0][1] = "'table.column'"; list[0][2] = "text_ptr";
  1008. }
  1009. else if (func.equals("TYPEPROPERTY")) // property is fixed
  1010. {
  1011. list = new Object[1][3];
  1012. list[0][0] = "int"; list[0][1] = "type"; list[0][2] = "property";
  1013. }
  1014. else if (func.equals("UNICODE"))
  1015. {
  1016. list[0][0] = "int"; list[0][1] = "'ncharacter_expression'";
  1017. }
  1018. else if (func.equals("UPPER"))
  1019. {
  1020. list[0][0] = "varchar"; list[0][1] = "character_expression";
  1021. }
  1022. else if (func.equals("USER")) // no brackets
  1023. {
  1024. list = new Object[1][1];
  1025. list[0][0] = "char";
  1026. }
  1027. else if (func.equals("USER_ID"))
  1028. {
  1029. list = new Object[2][];
  1030. list[0] = new Object[1];
  1031. list[1] = new Object[2];
  1032. list[0][0] = "int";
  1033. list[1][0] = "int"; list[1][1] = "'user'";
  1034. }
  1035. else if (func.equals("USER_NAME"))
  1036. {
  1037. list = new Object[2][];
  1038. list[0] = new Object[1];
  1039. list[1] = new Object[2];
  1040. list[0][0] = "nchar";
  1041. list[1][0] = "nchar"; list[1][1] = "id";
  1042. }
  1043. else if (func.equals("VAR"))
  1044. {
  1045. list[0][0] = "float"; list[0][1] = "expression";
  1046. }
  1047. else if (func.equals("VARP"))
  1048. {
  1049. list[0][0] = "float"; list[0][1] = "expression";
  1050. }
  1051. else if (func.equals("YEAR"))
  1052. {
  1053. list[0][0] = "int"; list[0][1] = "date";
  1054. }
  1055. else if (func.equals("@@CONNECTIONS") ||
  1056. func.equals("@@CPU_BUSY") ||
  1057. func.equals("@@CURSOR_ROWS") ||
  1058. func.equals("@@ERROR") ||
  1059. func.equals("@@FETCH_STATUS") ||
  1060. func.equals("@@IDLE") ||
  1061. func.equals("@@IO_BUSY") ||
  1062. func.equals("@@LOCK_TIMEOUT") ||
  1063. func.equals("@@MAX_CONNECTIONS") ||
  1064. func.equals("@@NESTLEVEL") ||
  1065. func.equals("@@OPTIONS") ||
  1066. func.equals("@@PACKET_ERRORS") ||
  1067. func.equals("@@PACK_RECEIVED") ||
  1068. func.equals("@@PACK_SENT") ||
  1069. func.equals("@@PROCID") ||
  1070. func.equals("@@ROWCOUNT") ||
  1071. func.equals("@@TEXTSIZE") ||
  1072. func.equals("@@TIMETICKS") ||
  1073. func.equals("@@TOTAL_ERRORS") ||
  1074. func.equals("@@TOTAL_READ") ||
  1075. func.equals("@@TOTAL_WRITE") ||
  1076. func.equals("@@TRANCOUNT"))
  1077. {
  1078. list = new Object[1][1];
  1079. list[0][0] = "int";
  1080. }
  1081. else if (func.equals("@@DATEFIRST") ||
  1082. func.equals("@@MAX_PRECISION"))
  1083. {
  1084. list = new Object[1][1];
  1085. list[0][0] = "tinyint";
  1086. }
  1087. else if (func.equals("@@DBTS"))
  1088. {
  1089. list = new Object[1][1];
  1090. list[0][0] = "varbinary";
  1091. }
  1092. else if (func.equals("@@IDENTITY"))
  1093. {
  1094. list = new Object[1][1];
  1095. list[0][0] = "numeric";
  1096. }
  1097. else if (func.equals("@@LANGID") ||
  1098. func.equals("@@SPID"))
  1099. {
  1100. list = new Object[1][1];
  1101. list[0][0] = "smallint";
  1102. }
  1103. else if (func.equals("@@LANGUAGE") ||
  1104. func.equals("@@SERVERNAME") ||
  1105. func.equals("@@SERVICENAME") ||
  1106. func.equals("@@VERSION"))
  1107. {
  1108. list = new Object[1][1];
  1109. list[0][0] = "nvarchar";
  1110. }
  1111. else if (func.equals("@@REMSERVER"))
  1112. {
  1113. list = new Object[1][1];
  1114. list[0][0] = "nvarchar(128)";
  1115. }
  1116. else
  1117. {
  1118. list = UDFNamesAndSignatures.getUDFParams(func);
  1119. }
  1120. return list;
  1121. } // end getParms
  1122. public static Object[][] getParameterFormats(String functionName)
  1123. {
  1124. return getParms(functionName);
  1125. }
  1126. public static void fillCategoryCombo(Combo functionsCategoryCombo, boolean isColumn)
  1127. {
  1128. if (!isColumn)
  1129. {
  1130. functionsCategoryCombo.add(msSQLServerAll);
  1131. functionsCategoryCombo.add(msSQLServerAggregate);
  1132. functionsCategoryCombo.add(msSQLServerConfiguration);
  1133. functionsCategoryCombo.add(msSQLServerCursor);
  1134. functionsCategoryCombo.add(msSQLServerDateAndTime);
  1135. functionsCategoryCombo.add(msSQLServerMath);
  1136. functionsCategoryCombo.add(msSQLServerMetadata);
  1137. functionsCategoryCombo.add(msSQLServerSecurity);
  1138. functionsCategoryCombo.add(msSQLServerString);
  1139. functionsCategoryCombo.add(msSQLServerSystem);
  1140. functionsCategoryCombo.add(msSQLServerSystemStatistical);
  1141. functionsCategoryCombo.add(msSQLServerTextAndImage);
  1142. functionsCategoryCombo.add(msSQLServerRowset);
  1143. functionsCategoryCombo.add(dbUDF);
  1144. }
  1145. else
  1146. {
  1147. functionsCategoryCombo.add(msSQLServerAll);
  1148. functionsCategoryCombo.add(msSQLServerAggregate);
  1149. functionsCategoryCombo.add(msSQLServerConfiguration);
  1150. functionsCategoryCombo.add(msSQLServerCursor);
  1151. functionsCategoryCombo.add(msSQLServerDateAndTime);
  1152. functionsCategoryCombo.add(msSQLServerMath);
  1153. functionsCategoryCombo.add(msSQLServerMetadata);
  1154. functionsCategoryCombo.add(msSQLServerSecurity);
  1155. functionsCategoryCombo.add(msSQLServerString);
  1156. functionsCategoryCombo.add(msSQLServerSystem);
  1157. functionsCategoryCombo.add(msSQLServerSystemStatistical);
  1158. functionsCategoryCombo.add(msSQLServerTextAndImage);
  1159. functionsCategoryCombo.add(msSQLServerRowset);
  1160. functionsCategoryCombo.add(dbUDF);
  1161. }
  1162. }
  1163. // Set up superclass for the various vendor function names and signatures
  1164. public static boolean isFunctionSupportingStar(String s)
  1165. {
  1166. List funcList = Arrays.asList(functionsSupportingStar);
  1167. if (funcList.contains(s))
  1168. {
  1169. return true;
  1170. }
  1171. return false;
  1172. }
  1173. public static boolean requiresNoBrackets(String functionName)
  1174. {
  1175. List funcList = Arrays.asList(noBracketFunctions);
  1176. if (funcList.contains(functionName))
  1177. {
  1178. return true;
  1179. }
  1180. return false;
  1181. }
  1182. public static boolean isNotSupported(String functionName)
  1183. {
  1184. List funcList = Arrays.asList(unsupportedFunctions);
  1185. if (funcList.contains(functionName))
  1186. {
  1187. return true;
  1188. }
  1189. return false;
  1190. }
  1191. public static String[] getFunctionList(String category, boolean isColumn, SQLDomainModel domainModel)
  1192. {
  1193. if (category.equals(msSQLServerAll))
  1194. {
  1195. if (!isColumn)
  1196. {
  1197. return UDFNamesAndSignatures.mergeTwoArrays(allFunctions,UDFNamesAndSignatures.getUDFNames(domainModel)) ;
  1198. }
  1199. return UDFNamesAndSignatures.mergeTwoArrays(allColumnSupportedFunctions,UDFNamesAndSignatures.getUDFNames(domainModel)) ;
  1200. }
  1201. else if (category.equals(msSQLServerAggregate))
  1202. {
  1203. return aggregateFunctions;
  1204. }
  1205. else if (category.equals(msSQLServerConfiguration))
  1206. {
  1207. return configurationFunctions;
  1208. }
  1209. else if (category.equals(msSQLServerCursor))
  1210. {
  1211. return cursorFunctions;
  1212. }
  1213. else if (category.equals(msSQLServerDateAndTime))
  1214. {
  1215. return dateAndTimeFunctions;
  1216. }
  1217. else if (category.equals(msSQLServerMath))
  1218. {
  1219. return mathFunctions;
  1220. }
  1221. else if (category.equals(msSQLServerMetadata))
  1222. {
  1223. return metadataFunctions;
  1224. }
  1225. else if (category.equals(msSQLServerSecurity))
  1226. {
  1227. return securityFunctions;
  1228. }
  1229. else if (category.equals(msSQLServerString))
  1230. {
  1231. return stringFunctions;
  1232. }
  1233. else if (category.equals(msSQLServerSystem))
  1234. {
  1235. return systemFunctions;
  1236. }
  1237. else if (category.equals(msSQLServerSystemStatistical))
  1238. {
  1239. return systemStatisticalFunctions;
  1240. }
  1241. else if (category.equals(msSQLServerTextAndImage))
  1242. {
  1243. return textAndImageFunctions;
  1244. }
  1245. else if (category.equals(msSQLServerRowset))
  1246. {
  1247. return rowsetFunctions;
  1248. }
  1249. else if (category.equals(dbUDF))
  1250. {
  1251. return UDFNamesAndSignatures.getUDFNames(domainModel);
  1252. }
  1253. return UDFNamesAndSignatures.mergeTwoArrays(allFunctions,UDFNamesAndSignatures.getUDFNames(domainModel)) ;
  1254. }
  1255. }