Obrigado por considerar contribuir para o SQLBridge! 🎉
Abra uma issue com:
- Descrição clara do problema
- Passos para reproduzir
- Comportamento esperado vs atual
- Versão do Python e banco de dados
- Código de exemplo
Abra uma issue descrevendo:
- O problema que a feature resolve
- Como você imagina a solução
- Exemplos de uso
# Clone o repositório
git clone https://github.com/thespamer/sqlbridge.git
cd sqlbridge
# Crie um ambiente virtual
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Instale em modo desenvolvimento
pip install -e ".[dev]"-
Fork o projeto
-
Crie uma branch para sua feature:
git checkout -b feature/minha-feature
-
Faça suas alterações seguindo o estilo do código
-
Execute os testes:
pytest tests/ -v
-
Verifique a cobertura:
pytest --cov=sqlbridge tests/
-
Formate o código:
black sqlbridge tests examples isort sqlbridge tests examples flake8 sqlbridge
-
Commit suas mudanças:
git commit -m "feat: adiciona suporte para X" -
Push para seu fork:
git push origin feature/minha-feature
-
Abra um Pull Request
- Seguimos PEP 8
- Usamos Black para formatação (line-length=100)
- Usamos isort para ordenar imports
- Docstrings em formato Google
def translate(self, sql: str) -> str:
"""
Traduz SQL padrão para o dialeto específico.
Args:
sql: SQL padrão a ser traduzido
Returns:
SQL traduzido para o dialeto
Raises:
ValueError: Se o SQL for inválido
Example:
>>> dialect = MySQLDialect()
>>> dialect.translate("SELECT * FROM users LIMIT 10")
'SELECT * FROM users LIMIT 10'
"""Seguimos Conventional Commits:
feat:Nova featurefix:Correção de bugdocs:Mudanças na documentaçãostyle:Formatação, sem mudança de códigorefactor:Refatoração de códigotest:Adição ou correção de testeschore:Manutenção geral
Exemplos:
feat: adiciona suporte para MariaDB
fix: corrige tradução de LIMIT no Oracle
docs: atualiza README com exemplos de DB2
test: adiciona testes para InformixDialect
tests/
├── test_core.py # Testes da classe SQLBridge
├── test_dialects.py # Testes dos dialetos
├── test_detector.py # Testes do detector
└── test_integration.py # Testes de integração
import pytest
from sqlbridge.dialects import MySQLDialect
class TestMySQLDialect:
def setup_method(self):
self.dialect = MySQLDialect()
def test_auto_increment(self):
sql = "CREATE TABLE test (id INTEGER AUTO_INCREMENT)"
result = self.dialect.translate(sql)
assert "AUTO_INCREMENT" in result# Todos os testes
pytest
# Testes específicos
pytest tests/test_dialects.py
# Com cobertura
pytest --cov=sqlbridge --cov-report=html
# Modo verbose
pytest -v
# Parar no primeiro erro
pytest -xCrie sqlbridge/dialects/meudb.py:
from .base import BaseDialect
class MeuDBDialect(BaseDialect):
name = "meudb"
type_mappings = {
"INTEGER": "INT",
"BOOLEAN": "BIT",
}
def _translate_auto_increment(self, sql: str) -> str:
# Implementar tradução
return sqlEm sqlbridge/dialects/__init__.py:
from .meudb import MeuDBDialect
DIALECT_MAP = {
# ...
"meudb": MeuDBDialect,
}Em sqlbridge/detector.py:
def detect_dialect(connection):
# ...
if "meudb" in module_name:
return "meudb"Em tests/test_dialects.py:
class TestMeuDBDialect:
def setup_method(self):
self.dialect = MeuDBDialect()
def test_auto_increment(self):
# Seus testes aqui
passAtualize:
README.md- adicione na lista de bancos suportadosQUICKSTART.md- adicione exemplo de usoexamples/- adicione exemplo prático
- Código segue o estilo do projeto
- Testes adicionados/atualizados
- Todos os testes passam
- Documentação atualizada
- CHANGELOG.md atualizado
- Commit messages seguem padrão
- Branch atualizada com main
- Seja respeitoso e inclusivo
- Aceite críticas construtivas
- Foque no que é melhor para a comunidade
- Mostre empatia com outros membros
- Abra uma issue com a tag
question - Entre em contato: contact@sqlbridge.dev
Ao contribuir, você concorda que suas contribuições serão licenciadas sob a MIT License.
Obrigado por contribuir! 🚀