init elowdb go-port commit

This commit is contained in:
41 changed files with 7273 additions and 0 deletions

138
examples/insert/main.go Normal file
View File

@@ -0,0 +1,138 @@
package main
import (
"fmt"
"os"
"strconv"
"strings"
)
func main() {
// Очищаем тестовые данные
os.RemoveAll("./data/test-linedb-insert")
fmt.Println("=== LineDb Insert Operations Demo ===")
// Получаем номера тестов из аргументов командной строки
testNumbers := parseTestNumbers()
// Выполняем тесты
if len(testNumbers) == 0 {
// Если номера не указаны, выполняем все тесты
runAllTests()
} else {
// Выполняем только указанные тесты
runSelectedTests(testNumbers)
}
fmt.Println("\n=== Все тесты завершены ===")
}
// parseTestNumbers парсит номера тестов из аргументов командной строки
func parseTestNumbers() []int {
if len(os.Args) < 2 {
return []int{}
}
// Получаем аргумент после имени программы
arg := os.Args[1]
// Проверяем, что это не флаг помощи
if arg == "-h" || arg == "--help" || arg == "help" {
printUsage()
return []int{}
}
// Разбиваем по запятой
parts := strings.Split(arg, ",")
var numbers []int
for _, part := range parts {
part = strings.TrimSpace(part)
if part == "" {
continue
}
num, err := strconv.Atoi(part)
if err != nil {
fmt.Printf("Ошибка: '%s' не является числом\n", part)
printUsage()
return []int{}
}
// Проверяем диапазон
if num < 1 || num > 8 {
fmt.Printf("Ошибка: номер теста %d должен быть от 1 до 8\n", num)
printUsage()
return []int{}
}
numbers = append(numbers, num)
}
return numbers
}
// printUsage выводит справку по использованию
func printUsage() {
fmt.Println("\nИспользование:")
fmt.Println(" go run main.go # Запустить все тесты")
fmt.Println(" go run main.go 1 # Запустить только тест 1")
fmt.Println(" go run main.go 1,3 # Запустить тесты 1 и 3")
fmt.Println(" go run main.go 2,3,4 # Запустить тесты 2, 3 и 4")
fmt.Println(" go run main.go help # Показать эту справку")
fmt.Println("\nДоступные тесты:")
fmt.Println(" 1 - Вставка одной записи")
fmt.Println(" 2 - Вставка массива записей")
fmt.Println(" 3 - Автоматическая генерация ID")
fmt.Println(" 4 - Партиционированные коллекции")
fmt.Println(" 5 - Проверка уникальности")
fmt.Println(" 6 - Различные типы данных")
fmt.Println(" 7 - Массовая вставка")
fmt.Println(" 8 - Множественные коллекции")
os.Exit(0)
}
// runAllTests запускает все тесты
func runAllTests() {
testSingleInsert()
testArrayInsert()
testAutoID()
testPartitionedCollections()
testUniquenessCheck()
testDifferentDataTypes()
testBulkInsert()
testMultipleCollections()
}
// runSelectedTests запускает только выбранные тесты
func runSelectedTests(numbers []int) {
for _, num := range numbers {
switch num {
case 1:
fmt.Println("1. Вставка одной записи")
testSingleInsert()
case 2:
fmt.Println("2. Вставка массива записей")
testArrayInsert()
case 3:
fmt.Println("3. Автоматическая генерация ID")
testAutoID()
case 4:
fmt.Println("4. Партиционированные коллекции")
testPartitionedCollections()
case 5:
fmt.Println("5. Проверка уникальности")
testUniquenessCheck()
case 6:
fmt.Println("6. Различные типы данных")
testDifferentDataTypes()
case 7:
fmt.Println("7. Массовая вставка")
testBulkInsert()
case 8:
fmt.Println("8. Множественные коллекции")
testMultipleCollections()
}
}
}