Index: branches/dev/data/lib/slib.php
===================================================================
--- branches/dev/data/lib/slib.php	(revision 11658)
+++ branches/dev/data/lib/slib.php	(revision 11723)
@@ -117,4 +117,54 @@
 	}
 	
+	return false;
+}
+
+// ¥¤¥ó¥Ç¥Ã¥¯¥¹¤ÎÂ¸ºß¥Á¥§¥Ã¥¯¤ÈºîÀ®
+function sfIndexExists($table_name, $col_name, $index_name, $length = "", $dsn = "", $add = false) {
+	if($dsn == "") {
+		if(defined('DEFAULT_DSN')) {
+			$dsn = DEFAULT_DSN;
+		} else {
+			return;
+		}
+	}
+
+	// ¥Æ¡¼¥Ö¥ë¤¬Ìµ¤±¤ì¤Ð¥¨¥é¡¼
+	if(!sfTabaleExists($table_name, $dsn)) return false;
+	
+	$objQuery = new SC_Query($dsn, true, true);
+	// Àµ¾ï¤ËÀÜÂ³¤µ¤ì¤Æ¤¤¤ë¾ì¹ç
+	if(!$objQuery->isError()) {
+		list($db_type) = split(":", $dsn);		
+		switch($db_type) {
+		case 'pgsql':
+			$arrRet = $objQuery->getAll("SELECT relname FROM pg_class WHERE relname = ?", array($index_name));
+			break;
+		case 'mysql':
+			$arrRet = $objQuery->getAll("SHOW INDEX FROM ? WHERE Key_name = ?", array($table_name, $index_name));			
+			break;
+		default:
+			break;
+		}
+		// ¤¹¤Ç¤Ë¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬Â¸ºß¤¹¤ë¾ì¹ç
+		if(count($arrRet) > 0) {
+			return true;
+		}
+	}
+	
+	// ¥¤¥ó¥Ç¥Ã¥¯¥¹¤òÄÉ²Ã¤¹¤ë
+	if($add){
+		switch($db_type) {
+		case 'pgsql':
+			$objQuery->query("CREATE INDEX ? ON ? (?)", array($index_name, $table_name, $col_name));
+			break;
+		case 'mysql':
+			$objQuery->query("CREATE INDEX ? ON ? (?(?))", array($index_name, $table_name, $col_name, $length));			
+			break;
+		default:
+			break;
+		}
+		return true;
+	}	
 	return false;
 }
