Skip to content

Commit 0a7a7de

Browse files
committed
feat: added show databases and show tables implementation
1 parent 0408c7e commit 0a7a7de

File tree

3 files changed

+56
-8
lines changed

3 files changed

+56
-8
lines changed

src/main/scala/dev/mongocamp/driver/mongodb/sql/MongoSqlQueryHolder.scala

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,24 @@ import dev.mongocamp.driver.mongodb._
44
import dev.mongocamp.driver.mongodb.database.DatabaseProvider
55
import SQLCommandType.SQLCommandType
66
import com.mongodb.client.model.DropIndexOptions
7-
import net.sf.jsqlparser.statement.Statement
8-
import net.sf.jsqlparser.expression.operators.conditional.{ AndExpression, OrExpression }
7+
import net.sf.jsqlparser.statement.{ShowStatement, Statement, UnsupportedStatement}
8+
import net.sf.jsqlparser.expression.operators.conditional.{AndExpression, OrExpression}
99
import net.sf.jsqlparser.expression.operators.relational._
10-
import net.sf.jsqlparser.expression.{ Expression, Parenthesis }
11-
import net.sf.jsqlparser.parser.{ CCJSqlParser, StreamProvider }
12-
import net.sf.jsqlparser.schema.{ Column, Table }
10+
import net.sf.jsqlparser.expression.{Expression, Parenthesis}
11+
import net.sf.jsqlparser.parser.{CCJSqlParser, StreamProvider}
12+
import net.sf.jsqlparser.schema.{Column, Table}
1313
import net.sf.jsqlparser.statement.create.index.CreateIndex
1414
import net.sf.jsqlparser.statement.delete.Delete
1515
import net.sf.jsqlparser.statement.drop.Drop
1616
import net.sf.jsqlparser.statement.insert.Insert
17-
import net.sf.jsqlparser.statement.select.{ AllColumns, FromItem, PlainSelect, Select, SelectItem }
17+
import net.sf.jsqlparser.statement.select.{AllColumns, FromItem, PlainSelect, Select, SelectItem}
18+
import net.sf.jsqlparser.statement.show.ShowTablesStatement
1819
import net.sf.jsqlparser.statement.truncate.Truncate
1920
import net.sf.jsqlparser.statement.update.Update
2021
import org.bson.conversions.Bson
2122
import org.mongodb.scala.model.IndexOptions
2223
import org.mongodb.scala.model.Sorts.ascending
23-
import org.mongodb.scala.{ Document, Observable }
24+
import org.mongodb.scala.{Document, Observable}
2425

2526
import java.util.concurrent.TimeUnit
2627
import scala.collection.mutable
@@ -84,6 +85,19 @@ class MongoSqlQueryHolder {
8485
sqlCommandType = SQLCommandType.Delete
8586
sqlTable = truncate.getTable
8687
}
88+
else if (classOf[ShowTablesStatement].isAssignableFrom(statement.getClass)) {
89+
sqlCommandType = SQLCommandType.ShowTables
90+
}
91+
else if (classOf[UnsupportedStatement].isAssignableFrom(statement.getClass)) {
92+
val unsupportedStatement = statement.asInstanceOf[UnsupportedStatement]
93+
val isShowDatabases = unsupportedStatement.toString.toLowerCase.contains("show databases")
94+
val isShowSchemas = unsupportedStatement.toString.toLowerCase.contains("show schemas")
95+
if (isShowDatabases | isShowSchemas) {
96+
sqlCommandType = SQLCommandType.ShowDatabases
97+
} else {
98+
throw new IllegalArgumentException("not supported sql command type")
99+
}
100+
}
87101
else {
88102
throw new IllegalArgumentException("not supported sql command type")
89103
}
@@ -137,6 +151,10 @@ class MongoSqlQueryHolder {
137151
.dropIndexForName(indexName, new DropIndexOptions().maxTime(1, TimeUnit.MINUTES))
138152
.map(_ => org.mongodb.scala.Document("indexName" -> indexName))
139153

154+
case SQLCommandType.ShowTables =>
155+
provider.collections()
156+
case SQLCommandType.ShowDatabases =>
157+
provider.databases
140158
case SQLCommandType.DropTable =>
141159
provider.dao(getCollection).drop().map(_ => org.mongodb.scala.Document("wasAcknowledged" -> true))
142160

src/main/scala/dev/mongocamp/driver/mongodb/sql/SQLCommandType.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ object SQLCommandType extends Enumeration {
66

77
type SQLCommandType = Value
88

9-
val Delete, Select, Update, Insert, CreateIndex, DropTable, DropIndex, DropDatabase = Value
9+
val Delete, Select, Update, Insert, CreateIndex, DropTable, DropIndex, DropDatabase, ShowDatabases, ShowTables = Value
1010

1111
}

src/test/scala/dev/mongocamp/driver/mongodb/sql/OtherSqlSpec.scala

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,36 @@ class OtherSqlSpec extends PersonSpecification with BeforeEach{
9595
indices.find(_.getString("name") == "student_idx") must beNone
9696
}
9797

98+
"show tables" in {
99+
val queryConverter = MongoSqlQueryHolder("show tables;")
100+
val selectResponse = queryConverter.run(TestDatabase.provider).resultList()
101+
selectResponse.size must be greaterThanOrEqualTo(1)
102+
selectResponse.head.getStringValue("name") mustEqual "mongo-sync-log"
103+
}
104+
105+
"show databases" in {
106+
val queryConverter = MongoSqlQueryHolder("SHOW DATABASES;")
107+
val selectResponse = queryConverter.run(TestDatabase.provider).resultList()
108+
selectResponse.size must be greaterThanOrEqualTo(1)
109+
}
110+
111+
"show schemas" in {
112+
val queryConverter = MongoSqlQueryHolder("SHOW SCHEMAS;")
113+
val selectResponse = queryConverter.run(TestDatabase.provider).resultList()
114+
selectResponse.size must be greaterThanOrEqualTo(1)
115+
}
116+
117+
"show databases" in {
118+
val queryConverter = MongoSqlQueryHolder("SHOW databases;")
119+
val selectResponse = queryConverter.run(TestDatabase.provider).resultList()
120+
selectResponse.size must be greaterThanOrEqualTo(1)
121+
}
122+
123+
"show schemas" in {
124+
val queryConverter = MongoSqlQueryHolder("show SCHEMAS;")
125+
val selectResponse = queryConverter.run(TestDatabase.provider).resultList()
126+
selectResponse.size must be greaterThanOrEqualTo(1)
127+
}
98128
}
99129

100130
}

0 commit comments

Comments
 (0)